c/c++开发分享如何在C中将double转换为int?

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 ,但这并不适用于这种大小的整数。 它们可以很容易地以二进制浮点forms精确表示。 (非常大的整数不能总是精确表示,但我们在这里不处理一个非常大的整数。)

    我强烈怀疑你的double实际上略低于3669.0,但是你正在使用的任何诊断设备显示为3669.0。 转换为整数值只执行截断,而不是舍入 – 因此问题。

    假设您的double类型是IEEE-754 64位类型,则最小值小于3669.0

     3668.99999999999954525264911353588104248046875 

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

     main() { double a; a=3669.0; int b; b=a; printf("b is %d",b); } 

    输出为: b is 3669

    当你写b = a; 然后它自动转换为int

     see on-line compiler result : 

    这是臭名昭着的浮点舍入问题。 只需添加一个非常小的数字,以纠正问题。

     double a; a=3669.0; int b; b=a+ 1e-9; 

     int b; double a; a=3669.0; b=a; printf("b=%d",b); 

    此代码将输出设为b = 3669,只有您清楚地检查它。

      以上就是c/c++开发分享如何在C中将double转换为int?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545999.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注