1

我有一个循环计算几个收入值,然后将它们加在一起,如下所示:

$SalesGrowth = $C2012Sales+$C2011Sales;

在某些情况下,这是可行的,我得到了预期,例如:761.9 + 759.0 = 1520.9

在其他情况下,看起来 PHP 随机决定不正确地舍入 (??) 并更改单位 (??),我得到:

8,788.0 + 8,794.3 = 16

这里发生了什么?我什至尝试用空格隔开单独的销售值,它们显示正确,所以基础数据没有错。

4

4 回答 4

9

解释为数字,8,788.0is 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, ""))

于 2012-01-04T18:56:20.070 回答
3

老哥逗号问题....

在添加它们之前从数字中删除所有逗号...

str_replace(",","",$no1);
于 2012-01-04T18:58:22.487 回答
2

这很简单……当您要求 PHP 使用+运算符时,它会隐式地将这些字符串转换为"8,788.0"数值。由于您有一个,字符,它会终止该数字的有用性,并导致它被解释为8. 等等...

摆脱非[0-9.]字符,它会更好地工作。

于 2012-01-04T18:58:09.260 回答
2

请注意,761.9 是一个有效数字,而 8,788.0 不是(从 PHP 的角度来看)。

所以8,788.0在数字上下文中将评估为 8,就像8,794.3. 并且 8+8 = 16。

要解决此问题,请处理您的数据以正确格式化数字。

于 2012-01-04T18:58:28.987 回答