我对每个人都有疑问。
int a = (int) ((0.7 + 0.1) * 10)
执行此代码后,a = 7。我不明白为什么,因为 (0.7+0.1)=0.8 和 0.8*10=8。谁能告诉我为什么?谢谢!
我对每个人都有疑问。
int a = (int) ((0.7 + 0.1) * 10)
执行此代码后,a = 7。我不明白为什么,因为 (0.7+0.1)=0.8 和 0.8*10=8。谁能告诉我为什么?谢谢!
问题是 0.1 和 0.7 都不能完全表示为double
:
0.1
被表示为大约0.10000000000000000555
。
0.7
被表示为大约0.69999999999999995559
。
它们的总和约为0.79999999999999993339
。乘以十并截断,得到7
.
What Every Computer Scientist Should Know About Floating-Point Arithmetic是一本很好的读物。
这是浮点算术,它会被搁置。
这里发生的情况是 (0.1+0.7)非常接近 0.8,但实际上不是0.8,当您将其乘以 10 时,您会得到 7.9999...,当您将其取底时,您会得到 7。
Java中 s 的小数部分int
被截断。您可以制作x
和y
浮点变量,也可以将它们转换为浮点数并将它们转换回来以获得 int 作为最终结果。