C#Math.Ceiling bug与否?

Ali*_*ile 10 c# ceil

我不知道为什么Ceiling的行为如下图所示

为什么是processingFee!= Settings.PaymentProcessingFeeInPercentage*prizesSum?

查看完整尺寸的图像

替代文字http://img514.imageshack.us/img514/3950/csharpceilingproblem.png

Jon*_*eet 25

您的百​​分比实际上不是0.05.它的值接近 0.05 ......可能略高于0.05.因此,当它乘以2600时,你得到一个超过130.0的值...然后被"天花板"到131.0.

使用我刚才写的一个小工具(可以从这个页面获得关于.NET二进制浮点类型的信息)看起来float最接近0.05 的实际值是0.0500000007450580596923828125.对于双打,它是0.05000000000000000277555756156289135105907917022705078125.

故事的道德:不要float用于这种事情 - 使用decimal.或者,如果您只是想表示一个百分比,如果实际上只能精确到百分之一,那么使用0-100的整数值.