2012-10-29 47 views
1

這是殺了我!我從來沒有這麼麻煩過,我無法弄清楚我在這裏做錯了什麼。簡單的數學小數在PHP中

如果我有一個數字,比如說2.32,並且我想用它來做數學,那麼它就不會工作。很簡單的例子:

$income = $commission; //Commission is 2.32, retrieved from XML 
echo "income: $income<br>"; 
$income100 = $income*100; 
echo "income100: $income100<br>"; 

結果我得到的是:

income: 2.32 
income100: 200 

我如何正確使用十進制數有沒有它改變它的數學?

非常感謝!

+0

$ income =(float)$ commission;可能是一個簡單的XML對象 – wesside

+0

@bigman那麼「$ income * 100」應該如何工作? – doniyor

+0

@bigman:你爲什麼要把它當成一個'string',以便它有希望轉換爲'float' ......只是把它當作一個「浮動」而投入使用 – prodigitalson

回答

5

您需要通過以下方式分配$income擺脫底層SimpleXMLElement的:

$income = (float) $commission; 

Example of what happens when you don't

$x = simplexml_load_string("<a>2.4</a>"); 
echo $x * 100; // output: 200 
+0

真棒,謝謝! – John

2

除了像Tim說的那樣使用浮點數外,還要確保在對浮點數進行算術運算時使用BC Math函數。具體bcmul()

$income100 = bcmul($income, 100);

0

問題與浮點點數是你不能用它們表示十進制數字(除非它可以寫爲整數aba/b,並且即使那麼只有當abs(a) < pow(2,52)b是2的冪時)。

您可以使用字符串函數來得到一個整數值會更好:

$tmp = explode(".",$commission); 
$tmp = intval($tmp[0].str_pad(substr($tmp[1],0,2),2,"0")); 

這將整數部分從小數部分分裂,確保Decima的部分是兩個數字長,並在推它整數部分的端部,從而有效地通過100

+2

浮點精度不能解釋'2.32' =>'2' –

+0

不,但我沒有試圖。在轉換爲數字時顯然會出現錯誤,導致小數點被丟棄,但是這個答案解決了這個問題。 –

0

原始數乘以我認爲最簡單的解決辦法是把它與投射到浮子floatval()

$income = floatval($comission)

保留其餘代碼,並且它應該按預期工作。