php 字符串转换小数,PHP-用逗号作为小数点转换数字

PHP-用逗号作为小数点转换数字

我有一个价格列表,逗号为小数点,点为千位分隔符。

一些例子:

12,30

116,10

1.563,14

这些来自第三方。 我想将它们转换为浮点数并将它们添加在一起。

做这个的最好方式是什么? number_format似乎不适用于此格式,str_replace似乎有点过头了,因为我必须对每个数字进行一次以上的操作。

有更好的办法吗? 谢谢。

7个解决方案

97 votes

使用str_replace()删除点并不过分。

几乎可以肯定,这是执行此操作所需的CPU最少的方法,而且即使您使用某些高级功能来执行此操作,也很可能是在后台执行的操作。

Teekin answered 2019-10-24T14:44:59Z

16 votes

如果您使用的是PHP5.3或更高版本,则可以使用numfmt_parse进行“反向的number_format”操作。 如果不是这样,您就不得不用preg_replace / str_replace替换出现。

Björn answered 2019-10-24T14:45:25Z

11 votes

您可以将NumberFormatter类及其parse方法一起使用。

Gumbo answered 2019-10-24T14:45:52Z

9 votes

此功能适用于点或逗号为小数的数字

function floatvalue($val){

$val = str_replace(",",".",$val);

$val = preg_replace('/\.(?=.*\.)/', '', $val);

return floatval($val);

}

$number = "1.325.125,54";

echo floatvalue($number); // The output is 1325125.54

$number = "1,325,125.54";

echo floatvalue($number); // The output is 1325125.54

Ramon answered 2019-10-24T14:46:21Z

7 votes

假设它们在文件或数组中,只需批量替换即可(即一次全部替换):

$input = str_replace(array('.', ','), array('', '.'), $input);

然后从那里处理数字,从而充分利用PHP的松散类型性质。

Paul Norman answered 2019-10-24T14:46:59Z

6 votes

可能看起来过多,但会在没有语言环境的情况下转换任何给定的格式:

function normalizeDecimal($val, int $precision = 4): string

{

$input = str_replace(' ', '', $val);

$number = str_replace(',', '.', $input);

if (strpos($number, '.')) {

$groups = explode('.', str_replace(',', '.', $number));

$lastGroup = array_pop($groups);

$number = implode('', $groups) . '.' . $lastGroup;

}

return bcadd($number, 0, $precision);

}

输出:

.12 -> 0.1200

123 -> 123.0000

123.91 -> 12345678.9100

123 456 78.91 -> 12345678.9100

123,456,78.91 -> 12345678.9100

123.456.78,91 -> 12345678.9100

123 456 78,91 -> 12345678.9100

Adrian Piechota answered 2019-10-24T14:47:31Z

2 votes

从PHP手册:

str_replace —替换所有出现的事件   搜索字符串的   替换字符串

我会沿着那条路线走,然后从字符串转换为float-floatval

Yishai Landau answered 2019-10-24T14:48:15Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值