C# 为什么我需要用Math.floor做浮点运算
为什么: 控制台写入线(数学层(128.766*1000))代码> 产生不同的结果:C# 为什么我需要用Math.floor做浮点运算,c#,.net-4.5,C#,.net 4.5,为什么: 控制台写入线(数学层(128.766*1000)) 产生不同的结果: Console.WriteLine(数学层((十进制)128.766*1000)) 不管是整数还是小数,正确答案肯定是128766。(例如,我熟悉十进制除法。) 我使用的是.NET 4.5 C 35;第一行使用浮点数学,这是不准确的128.766*1000可能计算为128765.999999999或类似值 Math.Floor将其向下舍入为128765 但是,在第二行中,您首先将结果转换为decimal,然后是Mat
Console.WriteLine(数学层((十进制)128.766*1000))代码>
不管是整数还是小数,正确答案肯定是128766。(例如,我熟悉十进制除法。)
我使用的是.NET 4.5 C 35;第一行使用浮点数学,这是不准确的128.766*1000
可能计算为128765.999999999
或类似值
Math.Floor
将其向下舍入为128765
但是,在第二行中,您首先将结果转换为decimal
,然后是Math.Floor
。转换为十进制可以消除这种不精确性,因为十进制
为128位,范围较小。有关更多信息,请参阅。当您将128765.9999999999
转换为decimal
时,它会变成128766
。读这个。一个Маth.Floor返回十进制,另一个double,这就是原因。运行此命令可以提示正在发生的事情:decimal
本身就是一种浮点类型,并且通常确实存在与所有浮点类型相同的不准确问题。只是OP的值可以精确地表示出来。