我需要将货币字符串转换为十进制,以便将其存储在“decimal(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}
。 (抱歉,我对正则表达式不好)。
编辑#2:
在我的网站上,用户可以设定价格,如果用户来自美国,他将使用1,222.33或1222.33,如果用户来自阿根廷,他将使用1.222,33或1222,33,现在,我需要转换格式为1222.33的数字,用于将其存储在具有十进制类型的数据库中。
编辑#3:请删除此答案。
答案 0 :(得分:0)
由于您的结构存在差异,因此不适合所有解决方案。
如果每次使用逗号作为小数点分隔符,这将是微不足道的(通过Marc B提供的代码剪断),但是你的第4项违反了该规则。
答案 1 :(得分:-3)
试试这个 $ variable = number_format((float)$ variable,0,' .00','');