【问题标题】:Get currency code based on symbol根据符号获取货币代码
【发布时间】:2017-11-29 06:48:38
【问题描述】:

我目前正在使用一个 API,而不是浮点数或整数作为货币,我收到这样的字符串。

  • 2.49 美元
  • 2.49 英镑
  • 2.49 欧元

问题是我需要单独存储价值和货币,但货币需要存储为 ISO 代码,例如欧元、美元或英镑,而不是欧元和美元。

在 PHP 中是否有任何方法可以使用 NumberFormatter 或类似的东西根据货币符号获取货币代码?

目前我只有一个很长的货币符号和名称列表,我用它们来执行string_contains('$2.49', '$') 之类的操作来检查某种货币。

【问题讨论】:

  • 没有通用的解决方案,因为多种货币使用相同的符号。例如。 AUD、NZD、USD……都使用美元符号。
  • @GauravDave — 这与问题的要求相反。

标签: php currency intl


【解决方案1】:

您可以使用NumberFormatter::parseCurrency

<?php
$fmt = new NumberFormatter('en_US', NumberFormatter::CURRENCY);

echo "#1: ".$fmt->parseCurrency("$2.49", $curr)." in $curr<br>";
echo "#2: ".$fmt->parseCurrency("£2.49", $curr)." in $curr<br>";
echo "#3: ".$fmt->parseCurrency("€2.49", $curr)." in $curr<br>";
?>

打印:

#1: 2.49 in USD
#2: 2.49 in GBP
#3: 2.49 in EUR

请注意,Richard 关于使用相同符号的多种货币的评论仍然适用,但可以通过为 NumberFormatter 指定不同的语言环境来处理:

<?php
$fmt = new NumberFormatter('en_AU', NumberFormatter::CURRENCY);

echo "#1: ".$fmt->parseCurrency("$2.49", $curr)." in $curr<br>";
?>

例如会将第一个输出更改为:

#1: 2.49 in AUD

【讨论】:

  • 我大胆猜测,将en_US 更改为另一个国家/地区代码可能会导致$ 根据区域设置被解释为不同的货币。
  • 是的,已确认。
猜你喜欢
  • 2012-06-12
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 2019-08-27
相关资源
最近更新 更多