2743410360.320のような値を取得し、変数に2743410360のような値を取得します。
私は試した
INTValueOfGB=$ echo "($gb+0.5)/1" | bc
しかし、私は(standard_in) 1: syntax error
丸めにはprintf
を使用できます。
$ printf "%.0f" 2743410360.320
$ p=2743410360.320
$ echo $p
2743410360.320
$ echo ${p%%.*}
2743410360
@vinの問題に対する答えが見つかりません。
しかし
(standard_in) 1: syntax error
を取得しています
シェル変数bc
が設定されていないため、gb
コマンドは(standard_in) 1: syntax error
を出力します。
$ 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に問題がある両方の領域で、変数の設定を解除すると問題が再現し、変数を設定すると問題が解決します。
コマンドにはいくつかの( )
が必要です:
INTValueOfGB=$( echo "($gb+0.5)/1" | bc )
しかし、それは数値を丸めません。そのためには、スケールを0に設定する必要があります。
INTValueOfGB=$( echo "scale=0;($gb+0.5)/1" | bc )
(x.5から)次の整数に切り上げられます。
「次の偶数への丸め」(バンカーの規則)を取得するには、printf丸めを使用する必要があります。
LC_NUMERIC=C printf "%.0f" 2743410360.320
LC_NUMERICは、数値がドットとして10進数として処理されるようにします。それはドイツのユーザーが使用することを好むものではありません、これは,
を使用して小数で動作するはずです:
$ LC_NUMERIC=de_DE.utf8 printf "%.0f" 2743410360,320
2743410360