.NET 5 Blazor WASM 字符串格式货币

.NET 5 Blazor WASM StringFormat Currency

我在英国文化中显示一些货币:

value.ToString("C2", CultureInfo.CreateSpecificCulture("en-GB"));

但是由于我已将我的代码切换到 .NET 5,我得到了以下结果:

GBP124.00

如何通过仍然使用 C0C2 取回 £124.00

编辑:根据回复补充信息

我在 Blazor WebAssembly 工作。 这里有一个例子:

(fiddle: https://blazorfiddle.com/s/2dyefc8o)

@page "/"
@using System.Globalization

@FormatDefaultFloatCurrency(price)
<br />
@FormatFloatCurrency(price)
<br />
@FormatFloatCurrencyISO(price)

@code {

    float price = 4897;

    string FormatDefaultFloatCurrency(float value)
    {
        var regionCode = "en-GB";
        return value.ToString("C0", CultureInfo.CreateSpecificCulture(regionCode));
    }

    string FormatFloatCurrency(float value)
    {
        var regionCode = "en-GB";
        var region = new RegionInfo(regionCode);
        var culture = CultureInfo.CreateSpecificCulture(regionCode);
        culture.NumberFormat.CurrencySymbol = region.CurrencySymbol;

        return value.ToString("C0", culture);
    }

    string FormatFloatCurrencyISO(float value)
    {
        var regionCode = "en-GB";
        var region = new RegionInfo(regionCode);
        var culture = CultureInfo.CreateSpecificCulture(regionCode);
        culture.NumberFormat.CurrencySymbol = region.ISOCurrencySymbol;

        return value.ToString("C0", culture);
    }
}

在 .NET Core 3.1 中(blazorFiddle 使用的版本):

£4,897
£4,897
GBP4,897

我在 .NET 5 中得到的结果:

GBP4,897
GBP4,897
GBP4,897

尽管我无法重现您的问题,但我想我可以帮助您。

您可以使用以下代码段设置货币符号:

var regionCode= "en-GB";
var region = new RegionInfo(regionCode);
var culture = CultureInfo.CreateSpecificCulture(regionCode);

culture.NumberFormat.CurrencySymbol = region.CurrencySymbol;

var currencyString = value.ToString("C2", culture);

此外,如果您需要将货币符号明确设置为三字符代码,您只需更改行

// that results in "£124.00"
 culture.NumberFormat.CurrencySymbol = region.CurrencySymbol;

对一个

// that results in "GBP124.00" 
culture.NumberFormat.CurrencySymbol = region.ISOCurrencySymbol;

C0 和 C2 return .NET 5 对我来说 124.00 英镑

请在区域设置中检查您的系统货币格式

控制面板 > 地区(选择英国)> 格式 > 高级(或附加设置)> 货币

screenshots

根据 https://github.com/dotnet/runtime/issues/45262,Blazor webAssembly 中的区域性似乎存在问题。

您可以添加

<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>

在客户端项目文件 (.csproj) 中,在 PropertyGroup