我有兩個數字類型的字符串,但結果出錯了。如何減去兩個數字串
$totalamount='41,305.33';
$normalamount='999.72';
echo $total=$totalamount-$normalamount;
是否有任何其他方式來做到這一點或問題與我自己的代碼。
我有兩個數字類型的字符串,但結果出錯了。如何減去兩個數字串
$totalamount='41,305.33';
$normalamount='999.72';
echo $total=$totalamount-$normalamount;
是否有任何其他方式來做到這一點或問題與我自己的代碼。
錯誤的原因是該字符串上有逗號。
$totalamount = floatval(str_replace(',', '','41,305.33'));
$normalamount = floatval(str_replace(',', '','999.72'));
echo $total = $totalamount-$normalamount;
順便說一句,doubleval() - 的floatval()
別名這裏是number_format()
反向功能。
解決方案:
function number_unformat($number, $dec_point = '.', $thousands_sep = ',') {
return (float)str_replace(array($thousands_sep, $dec_point),
array('', '.'),
$number);
}
$totalamount = number_unformat('41,305.33');
$normalamount = number_unformat('999.72');
$total = $totalamount - $normalamount;
echo $total;
輸出:
40305.61
PHP已經有這個功能http://de3.php.net/manual/en/class.numberformatter.php – MarcDefiant
@Mogria是的,在5.3之後。 – Carlos
沒有必要定義這樣一個複雜的函數來處理這樣一個簡單的操作。 – Ultimater
您因 '' 性格得到了錯誤的值,簡單地刪除它們......
$totalamount='41,305.33';
$normalamount='999.72';
echo (double)str_replace(',','',$totalamount)-
(double)str_replace(',','',$normalamount);
只需刪除逗號,它按預期工作。 沒有必要手動將字符串轉換爲數字,因爲減號操作符會爲我們執行此操作。
<?php
$totalamount='41305.33';
$normalamount='999.72';
echo $total=$totalamount-$normalamount;
原因'41,305.33'-'999.72'
結果-958.72
是因爲PHP,只要它看到一個逗號,認爲有一個無效的數字,修剪掉剩餘的字符。因此,你留下了'41'-'999.72'
這確實是-958.72
。
這是絕對正確的,這是解釋爲什麼會發生這種情況的唯一答案。爲什麼downvotes?! +1來計數行爲。 –
@Alix:我想猜測它被低估了,因爲「我有這個數據給我的問題......」的正確答案不是「使用不同的數據」。如果不是爲了解釋,這實際上是一個無法回答的問題。數據可能來自數據庫或其他東西。 (我的意思是,在41305.33更好的情況下,誰真的用真實代碼輸入'41,305.33'?這顯然是一個很小的例子。)用一些代碼將答案轉換爲「invalid 「數據轉化爲有用的東西(就像'str_replace'的例子那樣)。 – cHao
則可以將格式化的數字轉換爲數字PHP懂得使用NumberFormatter
$fmt = numfmt_create('de_DE', NumberFormatter::DECIMAL);
echo $total = $fmt->parse('41,305.33') - $fmt->parse('999.72');
您可能要失去'echo'或'$總='(取決於您是否要輸出的差或只是計算它)。由於賦值是一個表達式(基本上賦值給賦值),所以兩個都應該工作,但是在一個語句中執行這兩個操作都有點令人毛骨悚然。 – cHao
如果您只是刪除逗號,它將按預期工作。看到我的答案。 – Ultimater