C#新手,尝试进行一个简单的计算。
float old x=300
float Distance=300
float pitch=0.8
int sign=1
new x= old x - (sign * (Distance % pitch) * 0.5 f)
程序为new x生成的值是299.6
(我不明白)。
(Distance % pitch)
的值为0.7999955
。如果手动计算,则300 modulo 0.8
为0
。我猜模函数对浮点值的表现不同,但我不知道怎么做。还是按0.8的300个百分比计算?
对此的解释将不胜感激。
千万不要指望对十进制浮点值(例如0.8
)进行二进制浮点计算(使用float
或double
)来给出准确的结果。
问题是,大多数十进制数字不能用二进制浮点格式精确表示。你可以把它看作是试图用十进制表示1/3
。这是不可能的。
在您的情况下,0.8f
并不是真正的0.8
。如果您将值强制转换为double
以获得一些额外的精度,您将看到它更接近0.800000011920929
float pitch = 0.8f;
Console.WriteLine((double)pitch); // prints 0.800000011920929