我有一个计算一对夫妇的收入值,然后将它们放在一起,这样一个循环:数字值四舍五入意外
$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