为什么这个断言失败了?
import std.conv;
void main()
{
auto y = 0.6, delta=0.1;
auto r = to!int(y/delta);
assert(r == 6);
}
r的值应该是6而它的5,为什么?
答案 0 :(得分:5)
这可能是因为0.6不能纯粹用浮点数表示。你写的是0.6,但这并不是你得到的 - 你得到的东西是0.599999999。当你除以0.1时,得到类似于5.99999999的东西,它转换为5的整数(通过向下舍入)。
其他语言的例子:
C#:Why is (double)0.6f > (double)(6/10f)?
Java:Can someone please explain me that in java why 0.6 is <0.6f but 0.7is >=0.7f
答案 1 :(得分:4)
计算机表示二进制的浮点数。十进制数0.6和0.1没有精确的二进制表示,而用于表示它们的位数是有限的。结果,会有截断,其效果在分裂期间可见。该除法的结果不完全是6.00000000,但可能是5.99999999,然后被截断为5.