【问题标题】:How to set CurrencySymbol on Readonly CultureInfo.NumberFormat?如何在只读 CultureInfo.NumberFormat 上设置 CurrencySymbol?
【发布时间】:2025-12-19 16:45:11
【问题描述】:

我正在尝试使用与默认 .Net 文化 (SFr.) 不同的符号 (CHF) 来格式化货币 (Swiss Frank -- de-CH)。问题是该区域性的 NumberFormat 是 ReadOnly。

有没有使用 CultureInfo 和 NumberFormat 解决此问题的简单方法?有什么方法可以覆盖 CurrencySymbol?

例子:

Dim newCInfo As CultureInfo = CultureInfo.GetCultureInfo(2055)
newCInfo.NumberFormat.CurrencySymbol = "CHF"
MyCurrencyText.Text = x.ToString("c",newCInfo)

这将在设置NumberFormat.CurrencySymbol 时出错,因为NumberFormat**ReadOnly**

谢谢!

【问题讨论】:

    标签: .net cultureinfo number-formatting


    【解决方案1】:

    CultureInfo 上调用Clone,这将创建一个可变版本,然后设置货币符号。

    您可以更具体:获取 NumberFormatInfo 并仅克隆它。它稍微优雅一些​​,IMO,除非你需要改变文化中的其他任何东西。

    C# 中的示例:

    using System;
    
    using System.Globalization;
    
    class Test
    {
        static void Main()
        {
            CultureInfo original = CultureInfo.GetCultureInfo(2055);
            NumberFormatInfo mutableNfi = (NumberFormatInfo) original.NumberFormat.Clone();
            mutableNfi.CurrencySymbol = "X";
            Console.WriteLine(50.ToString("C", mutableNfi));
        }
    }
    

    【讨论】:

    • 漂亮,简单。我可以因为错过这个而踢自己。谢谢!