Bash脚本printf保留三位小数失效,输出始终为整数小数形式求助
问题根源
bash 的$((...))算术扩展只支持整数运算,所有除法操作会直接截断小数部分,只保留整数结果。你的表达式里的除法都会被取整,最终得到的number是个整数,所以用printf "%.3f"输出时,会自动补零变成 x.000 的格式。
比如你的表达式用整数运算计算的过程:
50*3=150,150/20=7(舍弃 0.5 的小数部分)19*2=38,38/7=5(舍弃 0.428... 的小数部分)- 最终结果:
5+7+5=17,所以printf输出就是17.000
修正方案
要得到带小数的结果,需要用支持浮点运算的工具,比如bc或awk:
方法1:使用 bc 命令
bc是专门的计算器工具,支持浮点运算,通过scale参数指定保留的小数位数:
# 计算并保留三位小数 result=$(echo "scale=3; 5 + 50*3/20 + (19*2)/7" | bc) printf "%.3f\n" "$result"
或者用bc -l参数(自动设置 scale 为 20,后续用printf控制三位小数):
printf "%.3f\n" $(echo "5 + 50*3/20 + (19*2)/7" | bc -l)
方法2:使用 awk 命令
awk 原生支持浮点运算,直接在 BEGIN 块中计算输出:
printf "%.3f\n" $(awk 'BEGIN{print 5 + 50*3/20 + (19*2)/7}')
内容的提问来源于stack exchange,提问作者user2636464
相关产品推荐
相关产品推荐

