2013-11-25 61 views
1

在bash腳本,我有1名這樣的腳本:如何在bash腳本解決59分之1= 0.016949153沒有五十九分之一= 0

n1 = 1 
n0 = 59 

# compute p1 
p1=$((n1/n0)) 
echo "p1 = $p1" 

我想我的輸出爲P1 =59分之1 = 0.016949153 但現實中,輸出是p1 = 0

所以,如何解決它。請幫助我

+0

[標籤:慶典]不能處理花車。你可以用它乘以1000如果你想精確到3位小數,然後打印相應。不過最好使用[tag:awk]。 – pfnuesel

回答

5

BASH不做任何浮點數學運算。你可以使用bcawk

對於前::

p1=$(bc -l <<< "scale=5; $n1/$n0") 
echo "$p1" 
.01694 

UPDATE:用awk:

awk -v n1=$n1 -v n0=$n0 'BEGIN{printf("%.5f\n", (n1/n0))}' 
0.01695 
+0

如果我想讓我的輸出從.01694915254237288135更改爲.01695。我該怎麼辦?謝謝 – TrungTrung

+0

@TrungTrung:查看使用'scale = 5'的更新信息。 – anubhava

+1

非常感謝。我剛剛解決了這個問題:) – TrungTrung

2

您可以使用bc獲得任意精度數學:

pax> n1=355 ; n0=113 
pax> p1=$(echo "scale=50;$n1/$n0" | BC_LINE_LENGTH=9999 bc) ; echo $p1 
3.14159292035398230088495575221238938053097345132743 

線長度停止bc從做它令人討厭的換行符爲更長的結果。

如果你有更多的逆波蘭的心態和我一樣,你也可以使用dc

pax> n1=355 ; n0=113 
pax> echo 50 k $n1 $n0/p | dc 
3.14159292035398230088495575221238938053097345132743 

在這兩種情況下,你可以設置要使用的規模(在bc設置scale或使用k命令在dc)。

+0

非常感謝。 – TrungTrung

2

我想補充

p1=$(python -c "print $n1*1.0/$n0") 
相關問題