awk计算给出较大数字的四舍五入答案

awk计算给出较大数字的四舍五入答案,awk,Awk,我有一个LinuxBash脚本,它使用awk计算文件中某些值的总和。我使用以下语法进行计算: $ awk "BEGIN { print $first_number + $second_number }" 对于答案低于9999.99的计算,它会正确显示答案。高于该值时,它将答案四舍五入到小数点后一位,或没有小数点,等等。如下所示: $ awk "BEGIN { print 89.54 + 6789.44 }" 6878.98 $ awk "BEGIN {print 1.66 + 68790.7

我有一个LinuxBash脚本,它使用awk计算文件中某些值的总和。我使用以下语法进行计算:

$ awk "BEGIN { print $first_number + $second_number }"
对于答案低于9999.99的计算,它会正确显示答案。高于该值时,它将答案四舍五入到小数点后一位,或没有小数点,等等。如下所示:

$ awk "BEGIN { print 89.54 + 6789.44 }"
6878.98

$ awk "BEGIN {print 1.66 + 68790.77 }"
68792.4

$ awk "BEGIN {print 1.66 + 687990.77}"
687992

$ awk "BEGIN {print 10100.66 + 6787990.77}"
6.79809e+06
我希望答案显示小数点,并且在所有情况下保留小数点后2位

你知道它为什么要做这些意想不到的事情吗?
感谢显然
print
不是输出小数的正确工具,请使用
printf
和适当的修饰符:

$ awk 'BEGIN {printf "%.2f\n", 10100.66 + 6787990.77}'
6798091.43
另外,在awk程序周围使用单引号。

在上面展开,您看到这种行为是有原因的。这是因为数字转换为字符串的确切方式是由
awk
中的预定义变量控制的,该变量在使用
print
时称为
OFMT

OFMT的默认值是%.6g,它创建的值最多有六个有效数字。如果您希望
打印
以表示更精确的表示,请将其更改为,例如,始终表示小数点后的两位数字,例如
%2.2f”


请参阅和,这解释了这些转换的行为。

正如其他人已经回答的那样,问题在于数字格式:将
%.2f
printf
或AWK的
OFMT
(适用于
print
)一起使用,以获得两位小数

要将shell变量传递给awk,可以使用
-v
命令行选项,例如

$ awk -v a="$first_number" -v b="$second_number" 'BEGIN {
    printf "%.2f\n", a + b
}'
如果始终只有两位小数,也可以在bash中使用不带小数点的整数算术,并且只格式化输出:

$ printf "%.2f\n" $(( 1010066 + 678799077 ))e-2

(当然,这只适用于保持小数位数的算术运算,例如加法和减法。)

欢迎访问SO,您可以查看此链接一次,用户在SO上获得好的、有用的答案后可以做什么,在此伟大的网站上,为您的学习干杯。
$ printf "%.2f\n" $(( 1010066 + 678799077 ))e-2