请求确认bc工具scale=0参数无效的疑似bug
请求确认bc工具scale=0参数无效的疑似bug
嘿,我完全懂你这种困惑——明明按预期设置了scale=0,结果却还是带着小数尾巴,换谁都会怀疑是不是碰到bug了!我测试了你在bc 1.07.1里的操作,确实会出现这个情况,不过这其实不算bug,是bc的scale参数工作逻辑和你想的不太一样。
先把你的操作和结果再理清楚,方便大家参考:
你运行的命令:
fval=1.40 ; echo "scale=0 ; 1000 * ${fval}" | bc
得到的输出:
1400.00
为啥scale=0没起作用?因为bc的scale参数控制的是算术运算过程中结果的小数精度,而不是强制移除输出里的所有小数位。你输入的1.40本身就带着两位小数,bc完成乘法计算后,会默认保留和操作数一致的小数位数,哪怕你设置了scale=0。
给你两个快速解决的办法:
- 用bc自带的
trunc()函数直接截断小数部分,命令改成这样:
运行后就能得到纯整数fval=1.40 ; echo "scale=0 ; trunc(1000 * ${fval})" | bc1400。 - 用
printf格式化输出,把结果转成整数:fval=1.40 ; printf "%.0f\n" $(echo "1000 * ${fval}" | bc)
另外补充下,你用的是Ubuntu 22.04自带的bc 1.07.1,这个版本里这个行为是符合它的设计逻辑的,升级到更高版本的bc可能表现会有变化,但当前版本里这不算bug哦。
备注:内容来源于stack exchange,提问作者Eric Marceau
相关产品推荐
相关产品推荐

