a=-1.4 b=42273.85 awk "BEGIN {print ($a + $b)}"
42272.4我期望的结果为42272.45,这里有什么问题?
wsewodh21#
您没有指定精确度,所以awk会为您挑选一个(%.6g,CONVFMT的预设值,请参阅https://www.gnu.org/software/gawk/manual/gawk.html#Built_002din-Variables):
%.6g
CONVFMT
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?。
s71maibg2#
在sh、bash、zsh和更多语言中执行浮点运算的一种解决方案是使用bc
sh
bash
zsh
bc
echo "$a + $b" | bc 42272.45
使用awk,您可以使用printf覆盖内部默认输出格式
awk
printf
awk -v a="$a" -v b="$b" 'BEGIN{printf("%.2f\n", a + b)}' 42272.45
xcitsw883#
您可以使用printf或设置OFMT变量,这将影响print,如下所示
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非常方便
3条答案
按热度按时间wsewodh21#
您没有指定精确度,所以awk会为您挑选一个(
%.6g
,CONVFMT
的预设值,请参阅https://www.gnu.org/software/gawk/manual/gawk.html#Built_002din-Variables):我还纠正了您在上面的awk脚本中对shell变量的使用,请参见How do I use shell variables in an awk script?。
s71maibg2#
在
sh
、bash
、zsh
和更多语言中执行浮点运算的一种解决方案是使用bc
使用
awk
,您可以使用printf
覆盖内部默认输出格式xcitsw883#
您可以使用
printf
或设置OFMT
变量,这将影响print
,如下所示给出输出
说明:
OFMT
应该是print
遇到数字时使用 * 浮点转换规范 *,默认值是%.6g
请注意,当您有多个print
,它们应该以统一方式输出数字时,OFMT
非常方便