1

如何在不爆炸数字或字符串的情况下将所有数字转换为 xx、xx 十进制格式?喜欢;

8,9 --> 8,90

8,99 --> 8,99

12,1 --> 12,10

129,9 --> 129,90

任何想法?

4

5 回答 5

5

您可以使用number_format,例如:

$n = 2.1;
echo number_format($n, 2, ','); // 2,10

如果您的输入中有逗号作为小数分隔符,您可以将值转换为浮点数:

$number = floatval(str_replace(',', '.', str_replace('.', '', $string_number)));

str_replace('.', '', $string_number)用于删除千位分隔符。 str_replace(',', '.', ... )用于用点替换逗号。

于 2013-01-09T10:09:59.263 回答
3

如果您intl启用了扩展,则该问题的最佳方法 (IMO) 将在此问题的公认答案中给出:PHP: unformat money

您可以使用

手册中的示例:

$formatter = new NumberFormatter('de_DE', NumberFormatter::CURRENCY);
var_dump($formatter->parseCurrency("75,25 €", $curr));

给出:float(75.25)

请注意,默认情况下不启用intl 扩展。请参阅安装说明

之后,您将获得一个浮点值和格式,使用number_format().

如果您没有该扩展名,请查看此问题中的正则表达式方法:清理货币字符串的快速方法

于 2013-01-09T10:23:21.723 回答
1

$money = number_format($number, 2, ",", ","); // $number must be a float, i.e 8.8

如果您的输入必须使用逗号作为小数分隔符,请也这样做:

$money = "20,2";
$fixed_money = floatval(str_replace(",", ".", $money));
echo number_format($fixed_money, 2, ",", ",");
于 2013-01-09T10:09:44.177 回答
0

str_pad 将添加缺少的零

$val = '1008,95';
$len = strpos($val, ',') + 3;
$newval = str_pad($val, $len, '0', STR_PAD_RIGHT);
echo "Value: " . $newval . "<br>";

不过,您必须确保您的值不超过两位小数

于 2013-01-09T10:19:56.813 回答
0

我制作了一个作曲家包,它可以根据您显示的货币来处理这些事情。

https://packagist.org/packages/votemike/money

如果您还输入国家/地区,它将以当地方式格式化货币(带或不带逗号以及正确的小数位数)

$money = new Money(99.50, 'JPY');
$money->format(); //¥100

因此,如果您只是创建一个新的货币对象,其中包含您想要显示的金额和您正在显示它的货币,那么在该对象上调用 ->format() 应该会给您您正在寻找的结果。

于 2017-08-18T13:59:12.550 回答