2010-07-19 39 views
6

我從用戶輸入讀取價格。當我乘以輸入爲int這樣Bash乘以十進制到int

T= "$((PRICE*QTY))"|bc ; gives line 272: 12.00: syntax error: invalid arithmetic operator (error token is ".00") or .50

取決於用戶輸入。我如何乘以這兩個變量並得到總共2個小數點?

+0

哇!這很好!我從來沒有在任何其他論壇上看到這樣的回覆,無論他們多麼活躍,大多數人都會得到「我們不會爲你分配任務」回覆。 這對我有用T ='echo $ QTYS \ * $ PRICE | bc'; 它也將價格四捨五入到小數點後兩位,沒有比例。 由於某種原因,只是價格*數量給我命令找不到錯誤。 – svenus 2010-07-19 11:06:49

+0

有一點要記住的是bash除了字符串之外並沒有真正的數據類型。每個變量都歸結爲一個字符串,因此它可以幫助您記住這一點。當然,不同的節目會以特殊的方式對待某些字符串。 – Daenyth 2010-07-19 12:58:15

回答

2
T="$(echo "$PRICE*$QTY" | bc)" 
+0

我得到(standard_in)2:語法錯誤 idk爲什麼。它幾乎和上面一樣 – svenus 2010-07-19 11:16:51

+0

@svenus:這個爲我工作。我不知道你爲什麼從'bc'得到這個錯誤。 – 2010-07-19 13:21:38

4
var=$(echo "scale=2;$PRICE*$QTY" |bc) 

您還可以使用AWK

awk -vp=$PRICE -vq=$QTY 'BEGIN{printf "%.2f" ,p * q}' 
+0

./menu3.sh:第278行:12.25:語法錯誤:無效算術運算符(錯誤標記爲「.25」) – svenus 2010-07-19 11:18:05

+0

刪除'$(())'。 bash不會做浮點運算。如果您想設置2位小數,請使用scale = 2 – ghostdog74 2010-07-19 12:38:18

+0

您需要在每個變量名稱前加上美元符號。 – 2010-07-19 13:22:47

13

這個工程:


PRICE=1.1 
QTY=21 
RES=$(echo "scale=4; $PRICE*$QTY" | bc) 
echo $RES 
+0

ha!這完全有效!我錯過了回聲。謝謝! – svenus 2010-07-19 11:13:49

0

首先,努力做浮點運算與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;我的bashdash都不能處理浮點數。

如果您想在您的外殼中進行算術運算,請注意printf(1)以及(可能)您的外殼的內置printf函數。如果您想在bc中進行算術運算,請注意特殊變量scale

+0

大部分$(())與bc我試圖給我錯誤。必須是因爲(())?感謝您的澄清。 – svenus 2010-07-19 11:22:23