我无法弄清楚以下代码。
int d = 5;
float f = 3.8f;
int ret = d*f;
视频是18,而不是我预期的19。为什么呢?
答案 0 :(得分:5)
这里有两个问题。第一个是浮点值不是小数,因此3.8f
更像是3.79999999999999999999923
或类似的东西。第二个是当转换为int时,系统将始终截断小数值,而不是舍入。
因此,如果您可以查看处理器,您会看到它正在进行
3.79999999999999999999923 * 5 = 18.999999999999999999615
然后删除非整数部分:
18
答案 1 :(得分:3)
您遇到了IEEE 754限制。 f
不是完全 3.8
,它只是微不足道。
答案 2 :(得分:1)
当将整数和浮点数相乘时,如果您没有明确地将它们相互转换,则依赖于您用来为您进行舍入的语言的隐式转换规则。有些语言会截断小数,而有些语言会围绕小数值,以便生成int。在将两种数字类型相乘的情况下,如果您不知道会发生什么,最好明确地转换和舍入,这样您就可以确切知道自己得到了什么。