php preg_match_all 结果从(数字)STRING 到 DECIMAL - 类型
我有一个脚本,它用 preg_match_all
标识给定文件中的一些数字,并采用给定的格式 '#(\d\,\d\d\d\d)#'
(十进制,保留 4 位小数)。稍后,我需要使用它们进行一些数学运算来找出总和、平均值等。
使用 print_r
我可以看到数组中的所有匹配项,这是可以的 (4,3456, 4,9098 , ETC。)。我验证了变量的类型,并且 gettype()
返回了 string
不幸的是,我无法对它们进行数学运算,因为当我在数学表达式中使用变量时,结果总是四舍五入逗号后面的内容。
例如:
4,3456 + 4,9098 + 4,3456 = 12,或 12,0000 - 如果我使用 number_format
。
我在数字中使用了 .
而不是 ,
,我用 number_format
格式化了结果,但没有成功。看来我错过了一些东西。
感谢您的帮助!
I have script that identifies with preg_match_all
some numbers from a given file and in a given format '#(\d\,\d\d\d\d)#'
(decimal, with 4 decimals). With them, later, I need to do some math operations to find out the sum, average etc.
With print_r
I can see all matches from the array and it is ok (4,3456, 4,9098, etc.). I verify the type of variables and gettype()
returned string
Unfortunately I cannot do math operations with them because when I use the variables in a math expression the result is always rounded regardless of what came afer the comma.
For example:
4,3456 + 4,9098 + 4,3456 = 12, or 12,0000 -- if I use number_format
.
I used .
instead of ,
in the numbers, I formatted the results with number_format
, but have had no success. It seems I am missing something.
Thanks for help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(2)
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
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
该错误甚至在 number_format 调用之前发生 - PHP 将
.
视为小数点分隔符,而不是,
。您需要 str_replace 所有数组元素:The error happens even before the number_format call -- PHP considers
.
as the decimal separator, not,
. you need to str_replace all your array elements: