如何在shell中添加浮点数?

ddrv8njm  于 2022-11-25  发布在  Shell
关注(0)|答案(3)|浏览(477)
a=-1.4
b=42273.85
awk "BEGIN {print ($a + $b)}"

42272.4
我期望的结果为42272.45,这里有什么问题?

wsewodh2

wsewodh21#

您没有指定精确度,所以awk会为您挑选一个(%.6gCONVFMT的预设值,请参阅https://www.gnu.org/software/gawk/manual/gawk.html#Built_002din-Variables):

a=-1.4
b=42273.85
awk -v a="$a" -v b="$b" 'BEGIN {printf "%.2f\n", (a + b)}'
42272.45

我还纠正了您在上面的awk脚本中对shell变量的使用,请参见How do I use shell variables in an awk script?

s71maibg

s71maibg2#

shbashzsh和更多语言中执行浮点运算的一种解决方案是使用bc

echo "$a + $b" | bc
42272.45

使用awk,您可以使用printf覆盖内部默认输出格式

awk -v a="$a" -v b="$b" 'BEGIN{printf("%.2f\n", a + b)}' 
42272.45
xcitsw88

xcitsw883#

您可以使用printf或设置OFMT变量,这将影响print,如下所示

a=-1.4
b=42273.85
awk -v a=$a -v b=$b 'BEGIN{OFMT="%.2f";print a + b}'

给出输出

42272.45

说明:OFMT应该是print遇到数字时使用 * 浮点转换规范 *,默认值是%.6g请注意,当您有多个print,它们应该以统一方式输出数字时,OFMT非常方便

相关问题