2012-01-04 79 views
1

我有一個計算一對夫婦的收入值,然後將它們放在一起,這樣一個循環:數字值四捨五入意外

$SalesGrowth = $C2012Sales+$C2011Sales; 

在某些情況下,這工作,我得到預期的,如:761.9 + 759.0 = 1520.9

在其他國家,它看起來像PHP隨機決定不正確(??)圓,改變單位(?),我得到:

8,788.0 + 8,794.3 = 16

這裏發生了什麼事?我甚至試圖迴應由空格隔開的單獨的銷售價值,並且它們顯示正確,因此底層數字沒有錯。

+4

它只是看起來不喜歡逗號,不是嗎? – fge 2012-01-04 18:56:38

+0

@fge:不知道你是否有幽默感,但這個評論讓我發笑:) – gahooa 2012-01-04 18:59:21

+0

在php.net上查看money_format – PurplePilot 2012-01-04 19:01:06

回答

9

解釋爲一個數字,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, ""))

+0

感謝 - 事情是,逗號正在由DataTable.js(用於顯示排序表等的JavaScript庫)打印。)所以這就是我如何粘貼他們 - 實際的銷售數字剛剛被拉出MySQL數據庫,並事先計算出來... – 2012-01-04 19:02:05

+0

Ohhhhhh - 是否number_format()插入逗號?我認爲這就是發生了什麼... – 2012-01-04 19:04:04

+0

@BenWilson:如果可以,請使用數據庫中的實際數字,而不是某些格式化的字符串表示形式。 – 2012-01-04 19:04:20

2

這很簡單...當您要求PHP使用+運算符時,它將隱式地將這些字符串(如"8,788.0")轉換爲數字值。既然你有一個,這個字符,它會終止這個數字的用處,並且它會被解釋爲8。等等...

擺脫非[0-9.]字符,它會更好地工作。

3

多德逗號問題....

刪除所有來自數字逗號將它們之前...

str_replace(",","",$no1); 
+0

或使用floatval(); – 2012-01-05 01:50:54

2

注意,761.9是一個有效的數量,同時8,788.0不是(從PHP的觀點)。

所以8,788.0在數字上下文將評估爲8,就像8,794.3。並且8 + 8 = 16。

要解決此問題,請處理數據以使數字格式正確。