我有一家電子商務商店,並且在購物車頁面上,它爲我提供了每種產品的單獨價格,但我需要總價。從php中的字符串值計算總價格
爲了做到這一點,我需要一起計算所有這些值,這很好。
但是,我是什麼樣的錯誤,我應該計算出在此格式給出的變量之和:
$455.00
什麼是提取價值的最佳途徑「455」這樣我就可以把它添加到事後的另一個值?
我希望我自己清楚......
我有一家電子商務商店,並且在購物車頁面上,它爲我提供了每種產品的單獨價格,但我需要總價。從php中的字符串值計算總價格
爲了做到這一點,我需要一起計算所有這些值,這很好。
但是,我是什麼樣的錯誤,我應該計算出在此格式給出的變量之和:
$455.00
什麼是提取價值的最佳途徑「455」這樣我就可以把它添加到事後的另一個值?
我希望我自己清楚......
請勿使用浮點數,而應使用分數中的整數。浮點數不精確(請參閱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;
謝謝,這看起來不錯,我會試試 –
如果您只需要刪除的美元符號,使用str_replace
。要將其轉換爲int或float,請對其進行類型轉換。但是,使用float會導致非精確計算,因此請小心!
$newval = (int)str_replace('$', '', '$455.00');
我認爲,您的電子商務網站只有$(USD)
$price= substr($string_price,1);
這將您的字符串轉換爲float:
$price = (float)substr("$455.00", 1);
echo($price);
欲瞭解更多信息,可以看到this answer ,其中有幾個很好的鏈接。
什麼如下:
$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);
您可能需要提取它的功能,特別是如果你需要在多個地方使用它。
要思考的另一件事是,爲什麼你有這樣的價值?這是一種顯示格式,這種轉換應該是最後完成的,理想情況下由模板完成。也許,如果可能的話,你應該考慮在之前修復代碼,而不是應用這樣的補丁。
它真的象你的程序是做錯了。你應該真的代表所有的價格(雙)而不是一個字符串。然後,只有當您需要向用戶顯示價格時,您纔會在其中預先輸入$符號,並將其轉換爲字符串。但是你的程序應該真正把價格看作數字而不是字符串。 如果您將價格作爲字符串「$ 5.99」存儲在數據庫中,那麼您確實在做錯了。
是的,但這就是插件如何工作的默認情況下... –
我從事PHP工作已經很長時間了,所以我不知道使用貨幣的最佳做法是什麼。一種簡單的方法是刪除「$」和「。」,並將結果作爲整數加在一起。
例如使用str_replace(),並替換「$」和「。」。空字符串:http://se2.php.net/manual/en/function.str-replace.php
這會給你美分的總和(從而避免一些潛在的舍入問題)。然後,您可以將其除以100並格式化,但您希望將總和顯示爲美元。
簡而言之,您有一個「$ 455.00」的刺痛,你需要它作爲「455.00」的浮動嗎? – Sudantha
正是我所需要的 –
不要使用浮動金融計算....。 – hakre