.NET与Flutter中如何根据货币代码显示正确格式的价格?
.NET 端解决方案
方法1:筛选对应货币代码的文化格式化
遍历所有特定文化,找到匹配目标货币ISO代码的文化,用该文化完成格式化。如果需要贴合主流使用习惯,可优先选择该货币的核心使用文化(比如EUR优先选es-ES或de-DE)。
public static string FormatPriceByCurrencyCode(decimal price, string currencyCode) { // 筛选使用目标货币的特定文化 var targetCulture = CultureInfo.GetCultures(CultureTypes.SpecificCultures) .FirstOrDefault(c => c.NumberFormat.CurrencyISOCode.Equals(currencyCode, StringComparison.OrdinalIgnoreCase)); if (targetCulture != null) { return price.ToString("C", targetCulture); } // 兜底:找不到对应文化时,直接显示货币代码+格式化数值 return $"{currencyCode} {price.ToString("N2")}"; }
方法2:自定义货币格式(灵活可控)
如果不需要依赖系统文化的其他规则,可手动构建NumberFormatInfo来定义各货币的显示规则,适合有严格格式要求的场景:
public static string FormatPriceCustom(decimal price, string currencyCode) { var nfi = new NumberFormatInfo(); switch(currencyCode.ToUpper()) { case "EUR": nfi.CurrencySymbol = "€"; nfi.CurrencyDecimalSeparator = ","; nfi.CurrencyGroupSeparator = "."; nfi.CurrencyDecimalDigits = 2; break; case "JPY": nfi.CurrencySymbol = "¥"; nfi.CurrencyDecimalDigits = 0; // 日元无小数位 break; case "USD": nfi.CurrencySymbol = "$"; nfi.CurrencyDecimalSeparator = "."; nfi.CurrencyGroupSeparator = ","; nfi.CurrencyDecimalDigits = 2; break; default: nfi.CurrencySymbol = currencyCode; nfi.CurrencyDecimalDigits = 2; break; } return price.ToString("C", nfi); }
Flutter 端解决方案
Flutter 推荐使用官方的intl包处理货币格式化,支持直接根据货币代码生成对应格式,也可结合用户地区优化显示。
步骤1:添加依赖
在pubspec.yaml中引入包:
dependencies: intl: ^0.18.1
方法1:仅按货币代码格式化
直接指定货币ISO代码,自动匹配对应符号和格式规则:
import 'package:intl/intl.dart'; String formatPriceByCurrency(double price, String currencyCode) { final formatter = NumberFormat.currency( name: currencyCode, symbol: null, // 自动加载对应货币符号 ); return formatter.format(price); }
方法2:结合用户地区优化显示
如果需要贴合用户所在地区的显示习惯(比如EUR在西班牙显示为4,50 €,在法国显示为€4,50),可同时指定地区参数:
import 'package:intl/intl.dart'; String formatPriceWithLocale(double price, String currencyCode, String locale) { try { final formatter = NumberFormat.currency( name: currencyCode, locale: locale, ); return formatter.format(price); } catch (e) { // 兜底:地区不支持时,用默认格式 return NumberFormat.currency(name: currencyCode).format(price); } }
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

