从 PHP 中的货币字符串获取数值

Getting the numeric value from a currency string in PHP

我正在尝试从字符串中提取数值,因为我需要在计算总计时使用它。

我在其他线程中读到我应该使用 PHP NumberFormatter 函数。

这是我的代码...

PHP

$fmt = new NumberFormatter( 'za_ZA', NumberFormatter::CURRENCY );
$num = "R1,500.00 ZAR";
var_dump($fmt->parseCurrency($num, $curr));

...以及我得到的相应输出。

HTML

<pre class="xdebug-var-dump" dir="ltr"><small>boolean</small> <font color="#75507b">false</font>
</pre>

我也试过正则表达式,但它最终给了我 1 而不是 1500。

不知道哪里错了,不知道应该用什么方法。

如果您只想要数字而不关心货币本身,这将适合您:

$num = "R1,500.00 ZAR";
$value = floatval(preg_replace('/[^\d\.]+/', '', $num));
var_dump($value); //float(1500)

如果您想使用 NumberFormatter,它应该能更好地处理逗号而不是句点和其他本地化特定差异,您需要确保字符串的格式正确.您调用 parseCurrency 的方式没问题(只需确保将 $curr 设置为 ZAR ),但结果是 false,这意味着字符串格式不正确。

您可以通过对号码调用 formatCurrency 来检查格式。您会看到正确的格式是 ZAR1,500.00,而不是 R1,500.00 ZAR.

小例子:

<?
  $fmt = new NumberFormatter( 'za_ZA', NumberFormatter::CURRENCY );
  $curr = 'ZAR';
  $string = $fmt->formatCurrency(1500,$curr);
  var_dump($string); //displays "ZAR1,500.00
  $value = $fmt->parseCurrency($num, $curr);
  var_dump($value); //displays 1500