我对每个人都有疑问。
int a = (int) ((0.7 + 0.1) * 10)
执行此代码后,a = 7。 我不明白为什么,因为(0.7 + 0.1)= 0.8和0.8 * 10 = 8。 谁能告诉我为什么? 谢谢!
答案 0 :(得分:25)
问题是0.1和0.7都不能完全表示为double
:
0.1
表示为大约0.10000000000000000555
。
0.7
表示为大约0.69999999999999995559
。
他们的总和约为0.79999999999999993339
。乘以10并截断,得到7
。
What Every Computer Scientist Should Know About Floating-Point Arithmetic是关于这个主题的精彩读物。
答案 1 :(得分:6)
它是浮点运算,它会被抛弃。
这里发生的是(0.1 + 0.7)真的接近0.8但是实际上 0.8,当你乘以10得到7.9999 ...当你落地时,你得到7。
答案 2 :(得分:3)
Java中int
的小数部分被截断。您可以创建x
和y
浮点变量,也可以将它们转换为浮点数并将它们强制转换为最终结果。