You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中double类型数值乘100后存入int变量结果错误如何处理?

问题原因排查

核心诱因:浮点数精度截断误差

C语言中double类型是二进制浮点数,无法精确存储部分十进制小数,例如你计算场景中的0.02,实际存储的是接近0.02的近似值(大约为0.019999999999999997)。当执行money*100操作时,实际计算结果为1.9999999999999996而非精确的2。
而double转int类型时默认执行截断取整,也就是直接舍弃小数部分,所以1.9999999999999996转int后就得到了1,和你预期的2不符。

修复方案
  • 临时修复:浮点转整数前添加微小偏移量抵消精度误差,修改乘法行代码为:
// 1e-6是远小于1分的误差值,可抵消常规浮点精度偏差
temp = (int)(money * 100 + 1e-6);
  • 最优方案:货币计算避免使用浮点数,直接用整数类型存储单位为分的金额,所有运算全程用整数执行,从根源上杜绝浮点精度问题。比如输入1.23元时直接转换为整数123分参与计算,无需任何浮点转换操作。
额外注意

你当前代码中money -= ((double)temp / 100)的操作会持续累积浮点误差,即使临时修复了单次转换问题,多次运算后仍可能出现结果偏差,建议优先更换为整数存分的方案。

内容的提问来源于stack exchange,提问作者frowit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:45:03