为什么: Console.WriteLine(Math.Floor(128.766*1000));
为什么我需要做的浮点运算与Math.floor
产生不同的结果:
Console.WriteLine(Math.Floor((decimal)128.766*1000));
当然,正确答案是128766是否有工作int或小数。 (我熟悉铸造到除法例如小数。)
我使用.NET 4.5 C#
为什么: Console.WriteLine(Math.Floor(128.766*1000));
为什么我需要做的浮点运算与Math.floor
产生不同的结果:
Console.WriteLine(Math.Floor((decimal)128.766*1000));
当然,正确答案是128766是否有工作int或小数。 (我熟悉铸造到除法例如小数。)
我使用.NET 4.5 C#
第一行使用浮点数学,这是不准确的。 128.766*1000
可能评估为128765.99999999999
或类似的东西。
Math.Floor
将其下降为128765
。
但是,在第二行中,首先将结果转换为decimal
,然后再将Math.Floor
转换为decimal
。由于decimal
是128位并且具有较小的范围,所以转换为十进制可以消除这种不准确性。有关更多信息,请参见here。当您将128765.9999999999
转换为decimal
时,它变成了128766
。
http://csharpindepth.com/Articles/General/FloatingPoint.aspx。读这个。一个Маth.Floor返回十进制其他的double,这就是为什么。 – mybirthname
运行以下提示:['Console.WriteLine((128.766 * 100).ToString(“e20”))'](https://ideone.com/s01m87) – dasblinkenlight