我有一個計算一對夫婦的收入值,然後將它們放在一起,這樣一個循環:數字值四捨五入意外
$SalesGrowth = $C2012Sales+$C2011Sales;
在某些情況下,這工作,我得到預期的,如:761.9 + 759.0 = 1520.9
在其他國家,它看起來像PHP隨機決定不正確(??)圓,改變單位(?),我得到:
8,788.0 + 8,794.3 = 16
這裏發生了什麼事?我甚至試圖迴應由空格隔開的單獨的銷售價值,並且它們顯示正確,因此底層數字沒有錯。
我有一個計算一對夫婦的收入值,然後將它們放在一起,這樣一個循環:數字值四捨五入意外
$SalesGrowth = $C2012Sales+$C2011Sales;
在某些情況下,這工作,我得到預期的,如:761.9 + 759.0 = 1520.9
在其他國家,它看起來像PHP隨機決定不正確(??)圓,改變單位(?),我得到:
8,788.0 + 8,794.3 = 16
這裏發生了什麼事?我甚至試圖迴應由空格隔開的單獨的銷售價值,並且它們顯示正確,因此底層數字沒有錯。
解釋爲一個數字,8,788.0
只是8
,解析停在逗號。
如果您想允許像千位分隔符這樣的噱頭,那麼您需要一些支持本地識別的數字解析。
更新:如果你有Zend Framework,你可以這樣做:
require_once('Zend/Locale/Format.php');
$locale = new Zend_Locale('en_GB'); // #1
$v = "8,410.5";
$n = Zend_Locale_Format::getNumber($v, array('locale' => $locale,'precision' => 3));
echo 2 * $number; // prints "16821"
而不是硬編碼的語言環境,你可以嘗試把它從環境中:new Zend_Locale(setlocale(LC_ALL, ""))
感謝 - 事情是,逗號正在由DataTable.js(用於顯示排序表等的JavaScript庫)打印。)所以這就是我如何粘貼他們 - 實際的銷售數字剛剛被拉出MySQL數據庫,並事先計算出來... – 2012-01-04 19:02:05
Ohhhhhh - 是否number_format()插入逗號?我認爲這就是發生了什麼... – 2012-01-04 19:04:04
@BenWilson:如果可以,請使用數據庫中的實際數字,而不是某些格式化的字符串表示形式。 – 2012-01-04 19:04:20
這很簡單...當您要求PHP使用+
運算符時,它將隱式地將這些字符串(如"8,788.0"
)轉換爲數字值。既然你有一個,
這個字符,它會終止這個數字的用處,並且它會被解釋爲8
。等等...
擺脫非[0-9.]
字符,它會更好地工作。
多德逗號問題....
刪除所有來自數字逗號將它們之前...
str_replace(",","",$no1);
或使用floatval(); – 2012-01-05 01:50:54
注意,761.9是一個有效的數量,同時8,788.0不是(從PHP的觀點)。
所以8,788.0
在數字上下文將評估爲8,就像8,794.3
。並且8 + 8 = 16。
要解決此問題,請處理數據以使數字格式正確。
它只是看起來不喜歡逗號,不是嗎? – fge 2012-01-04 18:56:38
@fge:不知道你是否有幽默感,但這個評論讓我發笑:) – gahooa 2012-01-04 18:59:21
在php.net上查看money_format – PurplePilot 2012-01-04 19:01:06