Flutter 中优雅地将数字格式化为各种国家的货币

介绍一种优雅地将数字格式化为各种国家的货币的方法

发布于  星期一,六月 10 2024

准备

安装 intl 这个包

flutter pub add intl

说明

对于货币来说,一般数据库中不会直接存储货币对应的值,一般存储的是放大100倍后的值。比如:986人民币,对应数据库中存的值是 98600; 999.99 人民币对应数据库中存的值是 99999

使用

**注意:后端返回的数据 99999 是被放大 100 倍后的数据,我们展示的时候需要除以 100 **

import "package:intl/intl.dart";

/// 在 int 类型的数据上扩展 toJPY toCNY toUSD 3个方法
extension IntExt on int {
  /// 格式化为日元
  String toJPY({bool symbol = false}) {
    return NumberFormat.currency(
      locale: "ja",
      symbol: symbol ? "¥" : "",
    ).format(this / 100);
  }

  /// 格式化为人民币
  String toCNY({bool symbol = false}) {
    return NumberFormat.currency(
      locale: "zh_CN",
      symbol: symbol ? "¥" : "",
    ).format(this / 100);
  }

  /// 格式化为美元
  String toUSD({bool symbol = false}) {
    return NumberFormat.currency(
      locale: "en_US",
      symbol: symbol ? "\$" : "",
    ).format(this / 100);
  }
}

假设上面的代码都放到 lib/extends/currency.dart 中,当我们需要把货币转换为对应的格式时可以 intValue.toCNY()、intValue.toJPY()、intValue.toUSD()、 使用

// 需要导入之前的代码,否则无法使用 int 的扩展方法
import "extends/currency.dart";

void example() {
  debugPrint(20000.toJPY()); // ¥200
  debugPrint(999999.toCNY()); // ¥9,999.99
  debugPrint(98600.toUSD()); // $986
}
  • Flutter