0
我用下面的行腳本在我的shell代碼 百分率爲echo "scale=2; $DP*100/$SDC" | bc
返回0.16作爲輸出,但我需要它作爲使用bc
0.16 POSIX兼容的如何計算在shell腳本個
我用下面的行腳本在我的shell代碼 百分率爲echo "scale=2; $DP*100/$SDC" | bc
返回0.16作爲輸出,但我需要它作爲使用bc
0.16 POSIX兼容的如何計算在shell腳本個
解決方案:
#!/bin/sh
Percent="$(echo "
scale=2;
a = $DP * 100/$SDC;
if (a > -1 && a < 0) { print "'"-0"'"; a*=-1; }
else if (a < 1 && a > 0) print 0;
a" | bc)"
當答案在-1和1(獨佔)之間但不爲零時,這種情況下所有這些特殊檢查都很難看。
讓我們使用awk
改用這個POSIX兼容的解決方案:
#!/bin/sh
Percent="$(echo "$DP" "$SDC" |awk '{printf "%.2f", $1 * 100/$2}')"
的Z shell可本地執行此操作:
#!/bin/zsh
Percent="$(printf %.2f $((DP * 100./SDC)))"
(該點是必要的指導zsh中使用浮點運算。 )
使用字符串操作的原生POSIX解決方案(假設整數輸入 ):
#!/bin/sh
# # e.g. round down e.g. round up
# # DP=1 SDC=3 DP=2 SDC=3
Percent=$((DP * 100000/SDC + 5)) # Percent=33338 Percent=66671
Whole=${Percent%???} # Whole=33 Whole=66
Percent=${Percent#$Whole} # Percent=338 Percent=671
Percent=$Whole.${Percent%?} # Percent=33.33 Percent=66.67
此計算1000倍所需的答案,使我們擁有我們所需要的最終解決方案的百分之一的數據。它增加了五個,所以我們可以正確截斷千分位數。然後,我們將臨時變量$Whole
定義爲截斷的整數值,我們暫時將其從$Percent
中除去,然後我們附加一個小數點和小數點,排除千分之一(我們犯了錯誤,因此我們可以正確舍入百分之一)。
已答覆在這裏:https://stackoverflow.com/questions/8402181/how-do-i-get-bc1-to-print-the-leading-zero – periket2000