将货币字符串转换为十进制PHP


Convert currency string to decimal PHP

我需要将货币字符串转换为十进制,以便将其存储在类型为"十进制(9,2)";。示例:

0               =>  0.00
1               =>  1.00
1500            =>  1500.00
1500,50         =>  1500.00
1500.50         =>  1500.00
1.500           =>  1500.00
1.500,50        =>  1500.50
10.550.670,67   =>  10550670.00
1.506,0         =>  1506.00

我试过使用preg_replace,但没能。

我该如何解决这个问题?

编辑#1:这是我的功能,第一个preg_match工作正常,现在,我需要将$number转换为"格式";xxxx.xx";

function formatNumber($number) {
    $isValid = preg_match("/^[0-9]{1,3}(?:[0-9]*(?:[.,][0-9]{2})?|(?:,[0-9]{3})*(?:'.[0-9]{2})?|(?:'.[0-9]{3})*(?:,[0-9]{1,2})?)$/", $number);
    if ($isValid) {
        return preg_replace("/^ THIS FAIL $/", "", $number);
    }
    return 0;
}

这个数字只有两个数字,我可以搜索(,|.)[0-9]{2}并将其替换为.[0-9]{2}。(很抱歉,我不喜欢regex)。

编辑#2:

在我的网站上,用户可以设置价格,如果用户来自美国,他会使用1222.33或1222.33,如果用户是阿根廷,他会用1.222,33或1222,33,现在,我需要将数字转换为1222.33格式,以便将其存储在十进制数据库中。

由于结构的差异,没有一个一刀切的解决方案。

如果所有的可能性都是使用逗号作为小数分隔符,这将是微不足道的(通过Marc B提供的代码剪切),但你的第4项打破了这一规则。

试试这个$variable=number_format((float)$variable,0,'.00','');