我需要将货币字符串转换为十进制,以便将其存储在类型为"十进制(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','');