bcを使用して浮動小数点値をintに丸めたり変換する方法は?インポート: "(standard_in) 1: 構文エラー"

bcを使用して浮動小数点値をintに丸めたり変換する方法は?インポート: "(standard_in) 1: 構文エラー"

2743410360.320のような値を取得し、変数に2743410360のような値を求めます。

頑張った

INTValueOfGB=$ echo "($gb+0.5)/1" | bc

しかし、ますます多くなります。 (standard_in) 1: syntax error

答え1

printf丸めに使用できます。

$ printf "%.0f" 2743410360.320

答え2

@vinの質問に対する回答は表示されません。

しかし、ますます多くなります。(standard_in) 1: syntax error

このbcコマンドは、(standard_in) 1: syntax errorシェル変数がgb設定されていないため印刷されます。

$ unset gb
$ echo "($gb+0.5)/1" | bc
(standard_in) 1: syntax error

$ gb=2743410360.320
$ echo "($gb+0.5)/1" | bc
2743410360

@dchirikovの答えに対するコメントで、@vinはprintf "%.0f"「動作しません」と言いました。

$ unset gb
$ printf '%.0f\n' $gb
0

$ gb=2743410360.320
$ printf '%.0f\n' $gb
2743410360

@vinに問題がある両方の領域で設定されていない変数が問題を再現して変数を設定すると、問題は解決しました。

答え3

$ p=2743410360.320
$ echo $p
2743410360.320
$ echo ${p%%.*}
2743410360

答え4

コマンドにはいくつか必要です( )

INTValueOfGB=$( echo "($gb+0.5)/1" | bc )

ただし、これを行うと数値が丸められないため、目盛をゼロに設定する必要があります。

INTValueOfGB=$( echo "scale=0;($gb+0.5)/1" | bc )

すると(x.5から)次の整数に丸められます。

「次の偶数に丸める」(バンカーの規則)には、printf丸めを使用する必要があります。

LC_NUMERIC=C printf "%.0f" 2743410360.320

LC_NUMERICは、数値が小数点単位で処理されるようにするために使用されます。これはドイツのユーザーが使用したいものではなく、小数点以下の桁数でも機能します,

$ LC_NUMERIC=de_DE.utf8 printf "%.0f" 2743410360,320
2743410360

関連情報