我的脚本用preg_match_all
标识给定文件中的某些数字,并且格式为'#(\d\,\d\d\d\d)#'
(十进制,小数点后4位)。有了他们,后来,我需要做一些数学运算来找出总和,平均等等。
使用print_r
我可以看到阵列中的所有匹配,并且没有问题(4,3456,4,9098等)。我验证了变量的类型,gettype()
返回字符串
不幸的是我无法用它们进行数学运算,因为当我在数学表达式中使用变量时,无论逗号是什么,结果总是四舍五入。
例如:
4,3456 + 4,9098 + 4,3456 = 12或12,0000 - 如果我使用number_format
。
我在数字中使用了.
而不是,
,我使用number_format
格式化了结果,但没有成功。我似乎错过了一些东西。
感谢您的帮助!
答案 0 :(得分:0)
PHP使用.
字符作为小数点分隔符,因此您需要在匹配的数字中将,
替换为.
,然后再将其转换为数字:
$number = floatval(strtr("1,234", ",", "."));
// 1.234
示例:
<?php
$numbers = array("1,234", "5,67");
$numbers = str_replace(",", ".", $numbers);
echo number_format($numbers[0] + $numbers[1], 4, ',', ' ');
答案 1 :(得分:0)
甚至在number_format调用之前就会发生错误 - PHP将.
视为小数分隔符,而不是,
。你需要str_replace所有的数组元素:
$values_array = str_replace(",", ".", $values_array)