C语言中double变量为何无法保留除法小数?计算2880*12/512异常求助
问题分析与解决:整数运算截断导致小数丢失
哦,这个问题我太熟悉了——你遇到的是C语言整数运算的截断特性搞的鬼!
咱们来拆解下你代码里的问题:
你写的表达式2880 * 12 / 512中,所有的操作数都是整数类型(默认是int),所以C语言会用整数算术规则来计算整个表达式,而不是你期待的浮点数运算。具体过程是:
- 第一步计算
2880 * 12,得到整数结果34560 - 第二步用34560除以512,整数除法的规则是直接丢弃小数部分(不是四舍五入),34560 ÷ 512的整数部分是67,剩下的0.5直接被截断了
- 最后把整数67赋值给
double类型的result,它会被自动转换为67.0,所以你输出的结果就是67.00
解决方法
只要让表达式中至少有一个操作数是浮点数类型,就能触发浮点数运算,保留小数部分。这里有几种简单的修改方式:
把其中一个常量改成浮点数:
result = 2880.0 * 12 / 512;因为
2880.0是double类型,后续的乘法和除法都会自动用浮点数运算,最终得到正确的67.5。显式转换其中一个整数为浮点数:
result = (double)2880 * 12 / 512;通过强制类型转换,把
2880转为double,同样会让整个表达式进入浮点数运算流程。
修改后再编译运行,你就能看到输出result = 67.500000啦!
内容的提问来源于stack exchange,提问作者Yos
相关产品推荐
相关产品推荐

