2011-10-12 73 views
1

我有一家電子商務商店,並且在購物車頁面上,它爲我提供了每種產品的單獨價格,但我需要總價。從php中的字符串值計算總價格

爲了做到這一點,我需要一起計算所有這些值,這很好。

但是,我是什麼樣的錯誤,我應該計算出在此格式給出的變量之和:

$455.00 

什麼是提取價值的最佳途徑「455」這樣我就可以把它添加到事後的另一個值?

我希望我自己清楚......

+0

簡而言之,您有一個「$ 455.00」的刺痛,你需要它作爲「455.00」的浮動嗎? – Sudantha

+0

正是我所需要的 –

+0

不要使用浮動金融計算....。 – hakre

回答

4

請勿使用浮點數,而應使用分數中的整數。浮點數不精確(請參閱Floating Point Precision),因此如果使用浮點數,計算往往會失敗。如果與付款相關,那尤其是一種負擔。

$str = '$455.00'; 
$r = sscanf($str, '$%d.%d', $dollar, $cent); 
if ($r <> 2 or $cent > 99 or $cent < 0 or $dollar > 9999 or $dollar < 0) throw new Exception(sprintf('Invalid string "%s"', $str)); 

$amountInDollarCents = $dollar * 100 + $cent; 

echo $str, ' -> ', $amountInDollarCents; 

Demo

+0

謝謝,這看起來不錯,我會試試 –

0

如果您只需要刪除的美元符號,使用str_replace。要將其轉換爲int或float,請對其進行類型轉換。但是,使用float會導致非精確計算,因此請小心!

$newval = (int)str_replace('$', '', '$455.00'); 
0

我認爲,您的電子商務網站只有$(USD)

$price= substr($string_price,1); 
0

這將您的字符串轉換爲float:

$price = (float)substr("$455.00", 1); 
echo($price); 

欲瞭解更多信息,可以看到this answer ,其中有幾個很好的鏈接。

0

什麼如下:

$amount = array(); 
$amount[0] = '$455.15'; 
$amount[2] = '$85.75'; 

$total = 0; 
foreach ($amount AS $value) { 
    $value = str_replace('$', '', $value); 
    $total += $value; 
} 
echo $total . "\n"; 

清潔操作:

$value = str_replace('$', '', $value); 

您可能需要提取它的功能,特別是如果你需要在多個地方使用它。

要思考的另一件事是,爲什麼你有這樣的價值?這是一種顯示格式,這種轉換應該是最後完成的,理想情況下由模板完成。也許,如果可能的話,你應該考慮在之前修復代碼,而不是應用這樣的補丁。

0

它真的象你的程序是做錯了。你應該真的代表所有的價格(雙)而不是一個字符串。然後,只有當您需要向用戶顯示價格時,您纔會在其中預先輸入$符號,並將其轉換爲字符串。但是你的程序應該真正把價格看作數字而不是字符串。 如果您將價格作爲字符串「$ 5.99」存儲在數據庫中,那麼您確實在做錯了。

+0

是的,但這就是插件如何工作的默認情況下... –

0

我從事PHP工作已經很長時間了,所以我不知道使用貨幣的最佳做法是什麼。一種簡單的方法是刪除「$」和「。」,並將結果作爲整數加在一起。

例如使用str_replace(),並替換「$」和「。」。空字符串:http://se2.php.net/manual/en/function.str-replace.php

這會給你美分的總和(從而避免一些潛在的舍入問題)。然後,您可以將其除以100並格式化,但您希望將總和顯示爲美元。