我有一个循环计算几个收入值,然后将它们加在一起,如下所示:
$SalesGrowth = $C2012Sales+$C2011Sales;
在某些情况下,这是有效的,我得到预期的,例如:761.9 + 759.0 = 1520.9
在其他情况下,看起来PHP随机决定不正确地圆(??)并更改单位(??)并得到:
8,788.0 + 8,794.3 = 16
这里发生了什么?我甚至尝试回显用空格分隔的单独销售价值,并且它们正确显示,因此基本数字没有错。
答案 0 :(得分: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, ""))
答案 1 :(得分:3)
打扰逗号问题......
在添加数字之前删除数字中的所有逗号......
str_replace(",","",$no1);
答案 2 :(得分:2)
这很简单......当你要求PHP使用+
运算符时,它会隐式地将这些字符串(如"8,788.0"
)转换为数值。由于您有一个,
字符,它会终止该数字的有用性,并导致它被解释为8
。等等...
删除非[0-9.]
个字符,它会更好用。
答案 3 :(得分:2)
请注意,761.9是有效数字,而8,788.0不是(从PHP的角度来看)。
因此,数字上下文中的8,788.0
将评估为8,就像8,794.3
一样。 8 + 8 = 16。
要解决此问题,请处理您的数据以正确格式化数字。