gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:25:31 26 4
gpt4 key购买 nike

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/

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