3

重複の可能性:
bc(1) で先行ゼロを出力するにはどうすればよいですか?

私はこの問題を抱えています:

x=$(echo "0.81+0.02" |bc)
echo $x

結果.83

0.83を見たいのですが、できません。

4

3 に答える 3

2

echo浮動小数点数については何も知りません。文字列と整数について知っているだけです。

を使用printfして、他のデータ型を処理し、正確な書式設定オプションを指定できます。

printf '%.2f\n' $x

例:

imac:barmar $ x=$(echo "0.81+0.02" |bc)
imac:barmar $ printf '%.2f\n' $x
0.83
于 2012-10-25T11:05:12.867 に答える
0

1行でそれを行うだけです:

printf '%.2f\n' $(echo 0.82+0.01 | bc)

また

echo 0.82+0.01 | printf '%.2f\n' $(bc)
于 2012-10-25T14:32:58.413 に答える
0

最も簡単な解決策は、既に "0" 文字を含む文字列に結果を追加することです。

x=0
x+=$(echo "0.81+0.02" |bc)
echo $x

数値が 1 より大きい場合を処理できるようにしたい場合は、代わりにパラメーター置換を使用できます。

x=$(echo "1.81+0.02" | bc )
x=${x/^./0.}
echo $x

残念ながら、前のコードは機能しません。2行目は、最初の文字がドットの場合は文字列に置き換えることを意図しています0.が、明らかに構文エラーを犯しました. 私は正規表現についてあまり詳しくありませんが、これはまさにあなたが探しているものです。

以下はより面倒ですが、防御的に機能します。

x=$(echo "1.81+0.02" | bc )
if [[ $x == .* ]]; then
   x=0$x
fi
于 2012-10-25T11:08:47.723 に答える