Cygwin Bash中负指数算术运算异常问题求助
解决Bash中整数除法导致的数学计算结果错误问题
这不是Cygwin的bug,问题出在默认整数运算规则上:
- Bash的
$((...))算术扩展只支持整数运算,所有除法会直接截断小数部分,只保留整数结果。比如1/4在整数运算里就是0,所以你用$((1 * (1/2**2)))得到0是正常的。 bc工具默认也是整数模式,不加参数的话,1/2同样会被截断为0。
给你几个正确计算浮点结果的方法:
- 使用带
-l参数的bc开启浮点运算
echo "1 * (1/(2^2))" | bc -l # 或者直接计算1/4 echo "1/4" | bc -l
执行后会得到0.2500000000这样的浮点结果。
- 使用
awk处理浮点计算
awk 'BEGIN{print 1 * (1/(2^2))}'
这个命令会直接输出0.25。
- 如果你想用
printf格式化结果,可以结合浮点计算工具,比如:
printf "%.3f\n" $(echo "1 * (1/(2^2))" | bc -l)
输出结果是0.250。
内容的提问来源于stack exchange,提问作者Tathastu Pandya
相关产品推荐
相关产品推荐

