decimal.ToString ("C") создает символ валюты в Linux - PullRequest
0 голосов
/ 11 июля 2019

У меня есть проект ASP.NET Core 2.1, в котором я отображаю некоторые номера валют через HTML-страницу Razor.

Просмотр модели

class MyModel
{
    public decimal Money { get; set; } = 1.23
}

Razor Page

@model MyModel
<p>@Model.Money.ToString("C")</p>

Этот проект развернут в службе приложений Azure.

В плане службы приложений Windows (и на моем локальном компьютере с Windows 10) это дает «1,23 доллара»как и ожидалось.Однако, если я разверну тот же проект в плане обслуживания приложений Linux, он отобразит «¤1.23».

Согласно Google:

Знак валюты (¤) - это символ, используемыйдля обозначения неопределенной валюты.

Есть идеи, какая здесь разница между двумя ОС?Нужно ли явно устанавливать культуру или что-то в Linux?

Ответы [ 2 ]

2 голосов
/ 12 июля 2019

Это вызвано тем, что linux не настроил языковой стандарт.

Вы можете установить культуру потоков в вашей программе, как показано ниже:

public class Program
{
    public static void Main(string[] args)
    {
        CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}
0 голосов
/ 11 июля 2019

В какой культуре работает ваш код?Я думаю, что Azure не знает текущей культуры и показывает вам общий символ денежной валюты.

Я рекомендую вам использовать эту функцию, где провайдером является ваш объект CultureInfo.

public string ToString (string format, IFormatProvider provider);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...