【问题标题】:Flutter NumberFormat format without changing languageFlutter NumberFormat 格式,无需更改语言
【发布时间】:2020-11-29 18:17:06
【问题描述】:

我正在尝试根据所选货币格式化数字而不进行翻译。例如

Text(NumberFormat.simpleCurrency(
    locale: 'bn_BN',
).format(123456.78));

输出

১,২৩,৪৫৬.৭৮৳

我想要格式,但不是区域设置语言。我如何让它看起来像这样 -

1,23,456.78 BDT or 1,23,456.78 ৳

有没有办法做到这一点

附:我只需要千位分隔符或分组作为货币默认值,例如 BDT 分组是 XX、XX、XXX 千位后的第一个逗号,然后每 2 位数字后的逗号。这是 NumberFormat 自己做的事情,但不幸的是,只有当你传入语言环境时。

【问题讨论】:

  • 格式化后的“123456789.78”应该是什么样子?
  • 我说在问题 1,23,456.78 BDT 或 1,23,456.78 ৳
  • 这就是为什么我要询问比你的例子大 1000 倍的数字。
  • 花生 12,34,56,789.78

标签: flutter locale currency number-formatting


【解决方案1】:

在另一个问题中查看这个答案:

https://stackoverflow.com/a/61530490/6704033

最后一个示例是您要使用的格式#,##,##0.00

我认为您不想提供您的 BN 语言环境,因为这是导致本地化数字的原因。也许保留此默认值或设置为“en”。

var myNumberFormat = NumberFormat('#,##,##0.00', 'en');
var myString = '${myNumberFormat.format(123456.78} ৳';

【讨论】:

    【解决方案2】:

    您可以在代码中的某处定义自定义 NumberFormatter(假设您将在应用程序的不同部分使用它)并使用它来格式化()数字:

    final myFormatter = new NumberFormat.currency(
          name: 'BDT',
          decimalDigits: 2,
          customPattern: '#,##,##0.00 \u00A4',
        );
    
    Text(myFormatter.format(12345678.01)),
    

    这将导致:1,23,45,678.01 BDT

    【讨论】:

    • 感谢您指出正确的方向。我最终创建了一个全局函数,它从语言环境中获取模式和符号,然后仅使用这 2 件事进行格式化。
    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多