2012-10-25 59 views

回答

2

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.81 + 0.02」 | BC) 的printf 「$ x.2f \ n」$ x,結果0.00 – bruli

+0

當您嘗試時發生了什麼? – Barmar

+1

它應該是''.2.2f \ n'',而不是''$ x.2f \ n'' – Barmar

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 

不幸的是,前面的代碼將無法正常工作的情況。第二行是爲了替換第一個字符,如果它是一個點,字符串爲0.,但顯然我犯了一個語法錯誤。我對regexps不是很瞭解,但是這應該正是你想要的。

以下是比較繁瑣的,但保守地工作。

x=$(echo "1.81+0.02" | bc) 
if [[ $x == .* ]]; then 
    x=0$x 
fi 
+0

$ 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

+0

確實。請參閱編輯。 –

+0

看到我的其他編輯,這次工作。 –

0

只要做到這一點的一條線:

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

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