可能重複:
How do I get bc(1) to print the leading zero?壞格式小數在bash腳本
我有這樣的問題:
x=$(echo "0.81+0.02" |bc)
echo $x
結果0.83
我想看0.83,但我沒有做到。
可能重複:
How do I get bc(1) to print the leading zero?壞格式小數在bash腳本
我有這樣的問題:
x=$(echo "0.81+0.02" |bc)
echo $x
結果0.83
我想看0.83,但我沒有做到。
echo
不知道浮點數的任何內容,它只知道字符串和整數。
可以使用printf
處理其它數據類型和指定精確格式化選項:
printf '%.2f\n' $x
實施例:
imac:barmar $ x=$(echo "0.81+0.02" |bc)
imac:barmar $ printf '%.2f\n' $x
0.83
最簡單的解決方案是將結果附加到字符串已經含有「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
不幸的是,前面的代碼將無法正常工作的情況。第二行是爲了替換第一個字符,如果它是一個點,字符串爲0.
,但顯然我犯了一個語法錯誤。我對regexps不是很瞭解,但是這應該正是你想要的。
以下是比較繁瑣的,但保守地工作。
x=$(echo "1.81+0.02" | bc)
if [[ $x == .* ]]; then
x=0$x
fi
$ x = 0 $ x = $(echo「$ x + 0.81 + 0.02」| bc) $ echo $ x - >結果0.83 ok。但。 $ x = 0 $ x + = $(echo「1.81 + 0.02」| bc) $ echo $ x - > result 01.83 - > bad format。 01.83 – bruli
確實。請參閱編輯。 –
看到我的其他編輯,這次工作。 –
只要做到這一點的一條線:
printf '%.2f\n' $(echo 0.82+0.01 | bc)
或
echo 0.82+0.01 | printf '%.2f\n' $(bc)
並不比簡單:-(X = $(回聲 「0.81 + 0.02」 | BC) 的printf 「$ x.2f \ n」$ x,結果0.00 – bruli
當您嘗試時發生了什麼? – Barmar
它應該是''.2.2f \ n'',而不是''$ x.2f \ n'' – Barmar