Search code examples
c#string-formattingcurrencyblazor-webassembly

.NET 5 Blazor WASM StringFormat Currency


I display some currencies in UK culture :

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

But since I have switched my code to .NET 5, I have the following result :

GBP124.00

How can i get back £124.00 by still using C0 or C2 ?

EDIT : Complementary infos according to responses

I'm working in Blazor WebAssembly. Here an exemple :

(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);
    }
}

In .NET Core 3.1 (the version blazorFiddle uses) :

£4,897
£4,897
GBP4,897

And the results I get in .NET 5 :

GBP4,897
GBP4,897
GBP4,897

Solution

  • According to https://github.com/dotnet/runtime/issues/45262, it seems there is an issue with the cultures in Blazor webAssembly.

    You can add

    <BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>
    

    in the client project file (.csproj), inside PropertyGroup