【问题标题】:Currency getting differently formatted on iOS and android with same locale货币在具有相同语言环境的 iOS 和 android 上的格式不同
【发布时间】:2019-06-02 20:54:48
【问题描述】:

我正在使用 React Native 开发一个应用程序,我需要以欧元和卢比显示货币。

我正在使用 Javascript 的 Intl 根据语言环境格式化货币,使用 en-IN 表示卢比,en-GB 表示欧元。

但货币在 iOS 和 android 上以不同的格式显示,在 iOS 中货币正确显示为 IN 像 3,74,73,474 但在 android 上以这种格式显示相同:37,473,474。不知道我该如何处理。下面是我为格式化编写的实用函数:

getformattedCurrency(value) {
   const formatter = new Intl.NumberFormat('en-IN', {
      style: 'currency',
      currency: 'INR'
      minimumFractionDigits: 0,
      maximumFractionDigits: 0,
   });
   return formatter.format(value);
}

我知道android的原生有DecimalFormat可以做到这一点,但我只想通过JS来实现。

任何帮助表示赞赏!谢谢。

【问题讨论】:

  • 您能否提供一个您尝试转换的示例数字和您获得的结果,那些### 没有提供足够的结果信息。您也可以在没有最小和最大小数位数参数的情况下尝试它。如果您想要四舍五入的数字,您可以在转换之前进行数学运算。
  • @maximelian1986 我已经编辑了问题以提供真实数据。请看一下。
  • 你调试了吗?您是否从该方法获得不同的值,或者您在应用程序 ui 上看到不同的值?可能是该方法以那种奇怪的形式呈现结果编号之后的东西?你的初始号码是 37473.474 吗?
  • 是的,我已经调试过了,然后才得出结论,该方法返回不同的值,初始数字是37473474 而不是37473.474
  • 我仍在测试,但现在我注意到您有错字,您在 minimumFractionDigits 参数之前缺少逗号...如果您在此处复制/粘贴它,可能也在您的代码中。

标签: javascript android react-native locale currency-formatting


【解决方案1】:

看起来由于某种原因无法从国际库中选择要使用的脚本。 所以

import 'intl';
import 'intl/locale-data/jsonp/en-IN';
import 'intl/locale-data/jsonp/en';

当您单独导入 en-IN 时,它可以在 android 上运行。无法在 iPhone 上测试。

【讨论】:

  • 或者可能是预期行为,您需要分别导入每种货币。
  • 好的,谢谢。我会检查并确认!谢谢:)
  • 这适用于两个平台。抱歉回复晚了。再次感谢!
  • 我应该在哪里导入这个?
  • 我收到错误提示在项目中找不到 intl
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 2017-01-09
相关资源
最近更新 更多