为什么:
Console.WriteLine(Math.Floor(128.766*1000));
产生不同的结果:
Console.WriteLine(Math.Floor((decimal)128.766*1000));
当然,无论是使用int还是小数,正确的答案都是128766。 (例如,我熟悉将十进制数转换为除法。)
我使用的是.NET 4.5 C#
答案 0 :(得分:4)
第一行使用浮点数学,这是不准确的。 128.766*1000
可能评估为128765.99999999999
或类似的内容。
Math.Floor
将其向下舍入为128765
。
但是,在第二行中,您在decimal
之前首先将结果转换为Math.Floor
。转换为十进制会消除此不准确性,因为decimal
是128位且范围较小。有关详细信息,请参阅here。当您将128765.9999999999
转换为decimal
时,它会变为128766
。