为什么我需要用 Math.floor 做浮点运算

Why do I need to do floating point arithmetic with Math.floor

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

产生不同的结果:

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

无论是使用整数还是小数,正确答案肯定是 128766。 (例如,我熟悉转换为小数以进行除法。)

我正在使用 .NET 4.5 C#

第一行使用浮点数学,这是不准确的。 128.766*1000 可能计算为 128765.99999999999 或类似的东西。

Math.Floor 四舍五入成为 128765.

然而,在第二行中,您先将结果转换为 decimal,然后再 Math.Floor。转换为十进制消除了这种不准确性,因为 decimal 是 128 位并且范围更小。有关详细信息,请参阅 here。当您将 128765.9999999999 转换为 decimal 时,它变成了 128766.