printfを使用して49.765を49.77に丸めますか?

printfを使用して49.765を49.77に丸めますか?

49.765は一連のコマンドの出力です。 print fを使って小数点以下の2桁から49.77に丸めたいと思います。

コードは何ですか?

答え1

$ x=49.765
$ printf "%.2f" $(echo "$x + 0.005" | bc)

printf(1)には丸め機能が組み込まれておらず、POSIXシェルには浮動小数点演算が組み込まれていないため、外部コマンドを使用する必要があります。

最も近い小数点以下の桁数に丸めるには、0.5 を加算して切り捨てます。最寄りの10分の1桁に丸めるには、Nudge Factorを10で割ります。

組み込みの機能が不足しているため、人々がシェルの代わりにPerlのようなものを使用することがよくあります。

$ perl -e 'printf "%.2f", 49.765 + 0.005'

同じですが、すべて1つのプロセスとして扱われます。

答え2

丸めには、次のコマンドを使用できます。

浮動小数点数 = 49.765; printf("%0.2f", number);

小数点以下2桁まで入手できなければなりません。

ただし、これは印刷のみであり、値は更新されません。変数の値を変更するには、次の方法を使用する必要があります。

#include <math.h>

float val = 49.765;

float rounded_down = floorf(val * 100) / 100;   /* Result: 49.76 */
float nearest = roundf(val * 100) / 100;  /* Result: 49.77 */
float rounded_up = ceilf(val * 100) / 100;      /* Result: 49.77 */

丸め(小数点の2桁以下の切り捨て)、最も近い値に丸め、丸めなど、3つの異なる丸めルールから選択する必要があります。通常、最も近い値に丸めようとします。

他の多くが指摘したように、浮動小数点表現の欠点のために、これらの丸められた値は正確に「明らかな」小数値ではないかもしれませんが、非常に似ています。

答え3

変数から「コマンドループ」の出力をキャプチャしますprintf

$ x=49.765

$ printf '%.2f\n' "$x"
49.76

丸めは、数値のバイナリ表現の「最も近い偶数に丸め」の規則に従って実行されます。ほとんどの場合、バイナリ表現は与えられた数字とまったく同じではないことを理解してください。

関連情報