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

发布于 12-03 09:21 字数 563 浏览 2 评论 0原文

我有一个脚本,它用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

萌︼了一个春2024-12-10 09:21:05

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

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

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:

$values_array = str_replace(",", ".", $values_array)
雨落□心尘2024-12-10 09:21:05

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

PHP uses the . character as decimal separator, so you have to replace the , by a . in your matched numbers before converting them to numbers:

$number = floatval(strtr("1,234", ",", "."));
// 1.234

Example:

<?php

$numbers = array("1,234", "5,67");
$numbers = str_replace(",", ".", $numbers);
echo number_format($numbers[0] + $numbers[1], 4, ',', ' ');

Try it here: http://codepad.org/LeeTiKPF

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文