2013-12-11 41 views
1

我觀察到在將KornShell(ksh)或Sqlite中的數學表達式與Google或Excel進行比較時,其結果並不相同。數學表達式適用於Google,但不適用於sqlite或KornShell。

首先把表達式下面在谷歌: 8 /(8 + 3)* 9 = 6.54545454545

現在請注意在KornShell以下:

> ksh 
> echo $((2 + 3)) 
5 
> echo $((8/(8 + 3) * 9)) 
0 
# Now change the first 8 to a 12 (higher than 11) and it works.... 
> echo $((12/(8 + 3) * 9)) 
9 

現在請注意相同的源碼:

sqlite> select 8/(8 + 3) * 9; 
8/(8 + 3) * 9 
0 

sqlite> select 12/(8 + 3) * 9; 
12/(8 + 3) * 9 
9 

如何使這個表達式在KornShell和sqlite中都能工作?

回答

3

sqlite有一個數據類型的概念。所有這些常數 - 12,8,3都是整型常量。使用整數進行計算時,不會將它們提升爲浮點。 Korn shell可能也是這樣。許多主流編程語言也會如此,特別是C及其衆多衍生產品。

如果你想浮點規則適用,讓您的數字浮點:

select 12.0/(8.0 + 3.0) * 9.0 
+1

是,證實這是真實的ksh(看到你的答案前)。祝你們好運。 – shellter

+0

是的,就是這樣!謝謝!!! – user1888167

+0

這就是爲什麼像BC和DC這樣的應用程序存在。如果你的精度更高(保持在殼層),改變操作的順序(保持數學等值)以使最大的數字相除,並嘗試使分割的最小值出現。 – NeronLeVelu

相關問題