我有一个循环计算几个收入值,然后将它们加在一起,如下所示:
$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
is just 8
,并且解析在逗号处停止。
如果您想允许千位分隔符之类的噱头,您将需要一些区域设置感知数字解析。
更新:如果你有Zend 框架,你可以这样做:
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, ""))
老哥逗号问题....
在添加它们之前从数字中删除所有逗号...
str_replace(",","",$no1);
这很简单……当您要求 PHP 使用+
运算符时,它会隐式地将这些字符串转换为"8,788.0"
数值。由于您有一个,
字符,它会终止该数字的有用性,并导致它被解释为8
. 等等...
摆脱非[0-9.]
字符,它会更好地工作。
请注意,761.9 是一个有效数字,而 8,788.0 不是(从 PHP 的角度来看)。
所以8,788.0
在数字上下文中将评估为 8,就像8,794.3
. 并且 8+8 = 16。
要解决此问题,请处理您的数据以正确格式化数字。