在PHP中如何从一个货币字符串中获取数值

5

我需要从一个字符串中提取数字值,并在总计算中使用它。根据其他讨论串,我应该使用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。

我不确定出现了什么错误,也不知道应该使用哪种方法。


你可以使用 ((\d+,)+\d+\.\d+)。查看 演示 - Tushar
你可能想要检查一下格式——我认识的大多数南非人在使用小数点时会将逗号作为分隔符,而不是千位分隔符。 - Simba
$curr 的值是多少? - jedrzej.kurylo
根据文档,@jedrzej.kurylo,我了解到$curr将是货币的价值。在这种情况下,它从'za_ZA'获取Rand。 - Marcus Christiansen
不对。$curr 应该是“3个字母的ISO 4217货币代码”,所以肯定不是'za_ZA',而是'ZAR'。 - jedrzej.kurylo
我更新了我的答案,它按照描述中的格式正确运行。 - jedrzej.kurylo
1个回答

5

如果您只需要数字本身,而不关心货币种类,那么以下方法适用于您:

$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

太好了。这就解决了问题。我希望能让数字格式化程序正常工作,因为这是首选方法,但即使删除ZAR似乎也没有帮助。 - Marcus Christiansen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接