Text-Processing

當我將 0 添加到 0.0 時,如何確保結果是 0.0 而不是 0?

  • March 12, 2019

一個文件中有兩列數字,第一行是這樣的:

0     0.0       

我想將第 1 列中的數字添加到第 2 列中的數字,並且我想保持結果為浮點數,而不是整數。所以第一行的結果應該是 0.0,其他行的結果應該是 .0,即使總和是整數。

我試過awk:

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

雖然我告訴它在“%.1g\n”後面保留一位小數點,但它仍然給我整數0。

我在 GNU awk 的手冊中看不到這一點,但例如glibc 中函式的手冊頁printf()提到了%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";

引用自:https://unix.stackexchange.com/questions/504989