c - 如何在 C 中将 double 转换为 int?

标签 c

double a;
a = 3669.0;
int b;
b = a;

我在 b 中得到 3668,而不是 3669。

如何解决这个问题? 如果有 3559.8,我也想要 3559 而不是 3560。

最佳答案

我怀疑你实际上没有这个问题 - 我怀疑你真的有:

double a = callSomeFunction();
// Examine a in the debugger or via logging, and decide it's 3669.0

// Now cast
int b = (int) a;
// Now a is 3668

让我这么说的是,虽然许多十进制值不能准确地存储在floatdouble 中是真的,但事实并非如此。 t 对这种数量级的整数成立。它们可以很容易地以二进制浮点形式精确表示。 (不能总是精确表示非常大的整数,但我们在这里不处理非常大的整数。)

我强烈怀疑您的 double实际上略小于 3669.0,但无论您使用什么诊断设备,它都显示为 3669.0。转换为整数值只是执行截断,而不是舍入 - 因此出现了问题。

假设你的double类型是IEEE-754 64位类型,小于3669.0的最大值正好是

3668.99999999999954525264911353588104248046875

因此,如果您使用任何诊断方法,其中该值将显示为 3669.0,那么很可能(我会说很可能)这就是正在发生的事情。

关于c - 如何在 C 中将 double 转换为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7657326/

相关文章:

c++ - C/C++ 行的人类可读优化版本

c - 在 Win32 上使用 GCC 向程序集符号添加前导下划线?

c - 如何在使用 GCC 编译的 C 文件中指定输出部分?

在c中创建一个具有start和end的子字符串

c - fread() 中的段错误

c - linux启动时间和停止计时器不工作?

c - 为什么C、Pascal等语言不能实现尾递归?

c - 具有结构体和指针的算法

c - 将值放入c中的数组中

C 中的回调函数与普通函数