为什么我需要使用Math.floor进行浮点运算

时间:2017-08-29 17:12:09

标签: c# .net-4.5

为什么: Console.WriteLine(Math.Floor(128.766*1000));

产生不同的结果:

Console.WriteLine(Math.Floor((decimal)128.766*1000));

当然,无论是使用int还是小数,正确的答案都是128766。 (例如,我熟悉将十进制数转换为除法。)

我使用的是.NET 4.5 C#

1 个答案:

答案 0 :(得分:4)

第一行使用浮点数学,这是不准确的。 128.766*1000可能评估为128765.99999999999或类似的内容。

Math.Floor将其向下舍入为128765

但是,在第二行中,您在decimal之前首先将结果转换为Math.Floor。转换为十进制会消除此不准确性,因为decimal是128位且范围较小。有关详细信息,请参阅here。当您将128765.9999999999转换为decimal时,它会变为128766