当我将 0 加到 0.0 时,如何确保结果是 0.0 而不是 0?

当我将 0 加到 0.0 时,如何确保结果是 0.0 而不是 0?

文件中有两列数字,第一行如下:

0     0.0       

我想将第 1 列中的数字添加到第 2 列中的数字,并且希望保留结果浮点数,而不是整数。因此,即使总和是整数,第一行的结果也应为 0.0,其他行的结果应为 .0。

我尝试过 awk:

awk '{printf "%.1g\n", $0=$1+$2}' > sum.txt     

虽然我告诉它保留小数点后一位数字“%.1g\n”,但它仍然给我整数0。

答案1

我在 GNU awk 手册中看不到这一点,但是例如printf()该函数的手册页在 glibc 中提到了%g这一点:

从结果的小数部分中删除尾随零;仅当小数点后面至少跟着一位数字时,才会出现小数点。

另外,还有#“替代格式”的修饰符,它表示:

对于 g 和 G 转换,尾随零不会像其他情况那样从结果中删除。

此外,根据需要%g自动更改1.23e+3格式,并且 精确字段(点后的数字)是“最大数量有效数字对于 g 和 G 转换”(不是小数点后的数字),所以我们得到:

printf "%#.1g\n", 0                             0.
printf "%#.2g\n", 0                             0.0
printf "%#.2g\n", 12                            12.
printf "%#.2g\n", 1234                          1.2e+03

因此,虽然您可以强制显示小数点,但不能强制显示尾随零。

另一种选择是使用%f

printf "%.1f\n", 0                              0.0
printf "%.1f\n", 1234                           1234.0

或者根据需要在点后添加缺失的零:

a = sprintf("%#.1g", 0); if (substr(a, length(a)) == ".") a = a "0";

答案2

尝试使用以下命令

echo "0 0.0"| awk '{sum=$1+$2;printf "%.1f",sum}'

输出

echo "0 0.0"| awk '{sum=$1+$2;printf "%.2f",sum}'

output
0.0

相关内容