php preg_match_all结果从(数字)STRING到DECIMAL - 类型

时间:2011-09-04 11:41:38

标签: php string decimal preg-match-all

我的脚本用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格式化了结果,但没有成功。我似乎错过了一些东西。

感谢您的帮助!

2 个答案:

答案 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, ',', ' ');

在此处试试:http://codepad.org/LeeTiKPF

答案 1 :(得分:0)

甚至在number_format调用之前就会发生错误 - PHP将.视为小数分隔符,而不是,。你需要str_replace所有的数组元素:

$values_array = str_replace(",", ".", $values_array)