Bash
bash calc 返回 800(應該是 600): echo ‘$(( 800 / (4 / 3) ))’
我從
x
數字計算縱橫比高度,在這個例子中我使用 4:3 比例,寬度為 800,結果(高度)應該是 600,但是 bash 返回 800,我不知道為什麼.我嘗試過其他語言,大多數似乎也有問題,php 似乎是少數可以工作的語言之一。
PHP(返回 600)
php -r 'echo 800/(4/3);'
Python(返回 800)
python -c "print(800/(4/3))"
bc -l
有點工作(返回 600.000000000000000000150)
-l
是“定義標準數學庫”,不確定這意味著什麼,但它似乎讓我更接近我的目標,但額外的 0 和 150 來自哪裡?echo '800 / (4 / 3)' | bc -l
我猜這與浮點處理或截斷
3/4
.現在我可以使用
php
, 並收工,但對於一個相對簡單的計算來說似乎有點矯枉過正。知道這裡發生了什麼。
Bash 算術只是整數。所以 4/3 返回 1。而 800/1 是 800。
如果您可以控制輸入,那麼您可以在除法之前重新考慮並進行乘法運算
$ echo $(( 800*3/4 )) 600
您的其他範例也是“整數”。例如,如果你通過替換來強制 python 浮點
4
,4.0
那麼你會得到不同的答案(Python 3 不需要這個)$ python -c "print(800/(4.0/3))" 600.0
bc -l
載入標準數學庫(具有s()
正弦、l()
自然對數等函式),但更重要的是,此處設置scale
為 20。scale
定義要在除法中生成小數後的小數位數,因此4/3
會有1.33333333333333333333
(實際上133333333333333333333/1e+20
),並且這就解釋了為什麼你得到600.00000000000000000150
.echo 'scale=1000; 800/(4/3)' | bc
將使您獲得更高的精度(無需載入數學庫),但您永遠不會到達
600
那裡,因為4/3
無法用十進製表示。