开发者

.NET: Can you simplify this Math.Ceiling expression

Can you simplify this Math.Ceiling expression

decimal total
decimal? quantity, multiplier
int? days

t开发者_如何学JAVAotal = (decimal)Math.Ceiling((double)quantity.Value * (double)days.Value * (double)multiplier);

EDIT I forgot to mention that this is Silverlight code, hence all the casts into double.


Why would you want to convert everything to double? I would use:

total = decimal.Ceiling(quantity.Value * days.Value * multiplier.Value);

(You could use Math.Ceiling(decimal) instead, but I feel it's clearer that it's using decimal if you use decimal.Ceiling.)

Converting everything to double, performing the arithmetic there, and then converting back to decimal is very likely to lose information. You should very, very rarely be converting between double and decimal IMO.


You didn't provide a whole lot of info, but here's one idea.

You use Nullable Types (types that end with a ?), but don't seem to actually check if they are null. (There might be code you omitted). If you know they won't be null, don't use nullable types. That will get rid of all the .Value terms in your expression.

This would change your expression to:

total = (decimal)Math.Ceiling((double)quantity * (double)days * (double)multiplier);

I don't know why you're casting each multiplier to double. I'd prefer multiplying them all together before casting to double. (check carefully for loss of precision.)

This would change your expression to:

total = (decimal)Math.Ceiling((double)(quantity * days * multiplier));

Overall, that looks simpler to me, and should be just as good.
(only testing will tell for sure!)


How about:

decimal total;
decimal? quantity = null, multiplier = null;
int? days = null;

total = Math.Ceiling(quantity ?? 0 * days ?? 0 * multiplier ?? 0);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜