0.0に0を加えると、結果が0ではなく0.0であるかどうかを確認できますか?

0.0に0を加えると、結果が0ではなく0.0であるかどうかを確認できますか?

ファイルには2つの数値列があり、最初の行は次のようになります。

0     0.0       

列1の数字を列2の数字に追加し、結果を整数ではなく浮動小数点として維持したいと思います。したがって、合計が整数であっても、最初の行の結果は0.0でなければならず、他の行の結果は.0でなければなりません。

私はawkを試しました:

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

小数点 "%.1g\n" の後に 1 桁を維持するように指示しましたが、まだ整数 0 が表示されます。

ベストアンサー1

GNU awkマニュアルではこれを見ることはできませんが、例えばprintf()関数のマニュアルページ%gこれはglibcで言及されています。

結果の小数部から末尾のゼロを削除します。小数点は、後に1つ以上の数字が続く場合にのみ表示されます。

#また、次のことを意味する「代替形式」修飾子があります。

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";

おすすめ記事