我從用戶輸入讀取價格。當我乘以輸入爲int這樣Bash乘以十進制到int
T=
"$((PRICE*QTY))"|bc
; gives line 272: 12.00: syntax error: invalid arithmetic operator (error token is ".00") or .50
取決於用戶輸入。我如何乘以這兩個變量並得到總共2個小數點?
我從用戶輸入讀取價格。當我乘以輸入爲int這樣Bash乘以十進制到int
T=
"$((PRICE*QTY))"|bc
; gives line 272: 12.00: syntax error: invalid arithmetic operator (error token is ".00") or .50
取決於用戶輸入。我如何乘以這兩個變量並得到總共2個小數點?
T="$(echo "$PRICE*$QTY" | bc)"
我得到(standard_in)2:語法錯誤 idk爲什麼。它幾乎和上面一樣 – svenus 2010-07-19 11:16:51
@svenus:這個爲我工作。我不知道你爲什麼從'bc'得到這個錯誤。 – 2010-07-19 13:21:38
var=$(echo "scale=2;$PRICE*$QTY" |bc)
您還可以使用AWK
awk -vp=$PRICE -vq=$QTY 'BEGIN{printf "%.2f" ,p * q}'
./menu3.sh:第278行:12.25:語法錯誤:無效算術運算符(錯誤標記爲「.25」) – svenus 2010-07-19 11:18:05
刪除'$(())'。 bash不會做浮點運算。如果您想設置2位小數,請使用scale = 2 – ghostdog74 2010-07-19 12:38:18
您需要在每個變量名稱前加上美元符號。 – 2010-07-19 13:22:47
這個工程:
PRICE=1.1
QTY=21
RES=$(echo "scale=4; $PRICE*$QTY" | bc)
echo $RES
ha!這完全有效!我錯過了回聲。謝謝! – svenus 2010-07-19 11:13:49
首先,努力做浮點運算與bc(1)
不使用-l
標誌爲界給你一些有趣的答案:
[email protected]:~$ bc -q
3.5 * 3.5
12.2
[email protected]:~$ bc -q -l
3.5 * 3.5
12.25
其次,$((...))
是企圖做算術在你的shell;我的bash
和dash
都不能處理浮點數。
如果您想在您的外殼中進行算術運算,請注意printf(1)
以及(可能)您的外殼的內置printf
函數。如果您想在bc中進行算術運算,請注意特殊變量scale
。
大部分$(())與bc我試圖給我錯誤。必須是因爲(())?感謝您的澄清。 – svenus 2010-07-19 11:22:23
哇!這很好!我從來沒有在任何其他論壇上看到這樣的回覆,無論他們多麼活躍,大多數人都會得到「我們不會爲你分配任務」回覆。 這對我有用T ='echo $ QTYS \ * $ PRICE | bc'; 它也將價格四捨五入到小數點後兩位,沒有比例。 由於某種原因,只是價格*數量給我命令找不到錯誤。 – svenus 2010-07-19 11:06:49
有一點要記住的是bash除了字符串之外並沒有真正的數據類型。每個變量都歸結爲一個字符串,因此它可以幫助您記住這一點。當然,不同的節目會以特殊的方式對待某些字符串。 – Daenyth 2010-07-19 12:58:15