You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:43:14