Flutter 中使用 intl 格式化不同国家的货币
更新于 2026-10-02 20:02
金额展示通常要处理货币符号、千位分隔和小数位。Flutter 中可以使用 intl 的 NumberFormat.currency,按指定地区和币种格式化金额。
安装依赖
flutter pub add intl先统一金额单位
下面的示例约定:人民币和美元以最小货币单位存储,展示前除以 100;日元直接以“日元”存储,不除以 100。
例如,99999 分人民币对应 999.99 元,而 20000 日元对应 20,000 日元。不能仅根据字段是整数,就统一把所有币种除以 100。如果接口采用自定义倍率,应先按接口约定换算。
使用扩展方法
import 'package:intl/intl.dart';
extension CurrencyFormat on int {
String toCNY({bool symbol = true}) {
return NumberFormat.currency(
locale: 'zh_CN',
name: 'CNY',
symbol: symbol ? '¥' : '',
decimalDigits: 2,
).format(this / 100);
}
String toUSD({bool symbol = true}) {
return NumberFormat.currency(
locale: 'en_US',
name: 'USD',
symbol: symbol ? r'$' : '',
decimalDigits: 2,
).format(this / 100);
}
String toJPY({bool symbol = true}) {
return NumberFormat.currency(
locale: 'ja_JP',
name: 'JPY',
symbol: symbol ? '¥' : '',
decimalDigits: 0,
).format(this);
}
}locale 控制地区格式,name 指定 ISO 货币代码,symbol 控制符号,decimalDigits 指定小数位。明确指定参数,有助于避免环境默认值影响展示。
调用示例
将扩展保存到 lib/extensions/currency.dart,在调用处导入:
import 'package:flutter/foundation.dart';
import 'extensions/currency.dart';
void example() {
debugPrint(99999.toCNY()); // ¥999.99
debugPrint(98600.toUSD()); // $986.00
debugPrint(20000.toJPY()); // ¥20,000
debugPrint(99999.toCNY(symbol: false)); // 999.99
}这些方法用于显示,不负责换汇,也不改变原始金额。金额计算仍应遵循业务的币种、精度和舍入规则,不使用格式化后的字符串作为计算输入。
评论 0
还没有公开评论。
评论已关闭,历史评论仍可阅读。