答案 0 :(得分:8)
答案 1 :(得分:5)
这是一个常见的精确问题。文字136.73
实际上代表数字
136.729999999999989768184605054557323455810546875
并且a-(int)a
的结果不是0.73
(即使这是显示的内容),而是
0.729999999999989768184605054557323455810546875
当你将其乘以100
时,你会得到
72.9999999999989768184605054557323455810546875
由于从double转换为int会切断小数点后的所有内容,因此会得到72
。
答案 2 :(得分:4)
0.73
无法准确表示,因此会四舍五入到接近它的数字,在此示例中,该数字低于0.73
。当乘以100时,得到72.[something]
,稍后会将其修剪为72
。
答案 3 :(得分:4)
如果您阅读以下文章可能会很清楚:What Every Computer Scientist Should Know About Floating-Point Arithmetic。
其他人已经证明(a - (int)a)
的结果并不完全是0.73,而是略低一点。文章解释了为什么。这不是一个简单的阅读,但实际上每个与FP合作的人都应该阅读并试图理解,IMO。