gpt4 book ai didi

c++ - 编译器将浮点型变量转换为整型变量时会做什么?

转载 作者:搜寻专家 更新时间:2023-10-31 00:19:38 24 4
gpt4 key购买 nike

编译器做什么?目的是获取点后的数字作为整数。我是这样做的:

float a = 0;
cin >> a;

int b = (a - (int)a)*10;

现在我的问题是:当我输入例如 3.2 时,我得到 2,这正是我想要的。它还适用于 .4、.5 和 .7。但是当我输入例如 2.3 时,我得到 2。对于 2.7,我得到 6,依此类推。但是当我不使用变量时,例如:

(2.3 - (int)2.3)*10;

我得到了正确的结果。

我不知道编译器做了什么。我一直认为,当我将 float 转换为整数时,它只是简单地切入点。这就是当我使用常量时编译器实际做的事情。然而,当我使用变量时,编译器减少了其中的一些,但不是全部。

最佳答案

您很可能没有遇到编译器问题,但 float 无法在二进制计算机上准确表示这一事实。

所以,当您这样做时:

float f = 2.7f;

..可能实际存储在计算机中的是:

2.6999999999999999

这是二进制计算机上 float 的一个众所周知的特性。 SO 上有许多讨论此问题的帖子。

关于c++ - 编译器将浮点型变量转换为整型变量时会做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7770892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com