奇怪的类型转换

shi*_*ilk 2 types

我只是想不出以下代码.

int d = 5;
float f = 3.8f;
int ret = d*f;
Run Code Online (Sandbox Code Playgroud)

按照我的预期,退步是18,而不是19.为什么?

Str*_*ior 5

这里有两个问题.第一个是浮点值不是小数,所以3.8f更像是3.79999999999999999999923或类似的东西.第二个是当转换为int时,系统将始终截断十进制值,而不是舍入.

因此,如果您可以查看处理器,您会看到它正在运行

3.79999999999999999999923 * 5 = 18.999999999999999999615
Run Code Online (Sandbox Code Playgroud)

然后删除非整数部分:

18
Run Code Online (Sandbox Code Playgroud)