Text-Processing
當我將 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。
我在 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";