我需要有人帮助,我将不胜感激,非常感谢
下面作为左侧的几个示例,我想交换为货币格式/右侧
- 123,00 至 123.00
- 1.123,00€ 至 1,123.00
- $11.123,00 至 11,123.00
- 12.123,00 ZH 至 12,123.00
- 12.123,00cH 至 12,123.00
- £1.123.123,00 至 1,123,123.00
- 112312300 KN 至 1,123,123.00
或例如
- 1,123.00€ 至 1,123.00
- $11.123.00 至 11,123.00
- 12,123,00 ZH 至 12,123.00
- 12.123,00cH 至 12,123.00
- £1.123,123,00 至 1,123,123.00
- 11,231230.0 KN 至 1,123,123.00
这意味着无论左侧的任何内容,都应更改为逗号作为千位数字,点更改为十进制数字,
似乎可以使用preg_replace或str_replace来完成,但是我该怎么办?
去掉非数字字符,然后通过number_format()
。
$val = preg_replace("/[^0-9]/", "", "11,231230.0 KN") / 100;
$formatted = number_format($val, 2, ".", ",");
// Outputs 1,123,123.00
编辑添加了/ 100
,因为它在原始零之后添加了小数位。
最简单的方法是首先删除所有非数字内容,然后使用 number_format
。
// assuming $str holds the original string
$str = preg_replace('/[^0-9]/', '', $str); // now just a string of numbers
$str = number_format( $str, 2 ); // 2 decimal places
你可以试试
print number_format(preg_replace('/'D/', '', $number), 2, '.', ',');
我不得不从货币上做同样的事情来规范我正在处理的项目的格式。
如果格式化为#####.##
并支持以下输入,则代码正在重新处理要输出的任何字符串:
// these are my unit test check
0.00 returned by filtering 0
0.20 returned by filtering 0.2
0.20 returned by filtering 0,2
0.22 returned by filtering 0.22
0.22 returned by filtering 0,22
18.20 returned by filtering 18.2
1000.00 returned by filtering 1 000
1000.00 returned by filtering 1,000
1000.00 returned by filtering 1,000.00
1000.00 returned by filtering 1000,00
1000.00 returned by filtering 1 000,00
1000.20 returned by filtering 1 000,2
1000.20 returned by filtering 1 000,20 $
1000.20 returned by filtering abc1def00test0dot.twenty20
以及与任何非数字字符交错的任何其他组合
if (strpos($string, '.') === false
&& strpos($string, ',') === false
) {
$string .= '.00';
}
$string = preg_replace('/[^0-9.,]/', '', $string);
$string = preg_replace('/[.,]/', '.', $string);
while (
strpos($string, '.') != strrpos($string, '.')
|| strlen($string) - 1 - strrpos($string, '.') > 2
) {
$pos = strpos($string, '.');
if ($pos > 0) {
$string = substr($string, 0, $pos) . substr($string, $pos +1);
} else {
break;
}
}
return (float)$string;
最后用number_format()
重新格式化标准化数字