首页 > 解决方案 > decimal.ToString("C") 在 Linux 上生成 ¤ 货币符号

问题描述

我有一个 ASP.NET Core 2.1 项目,我在其中通过 Razor HTML 页面呈现一些货币数字。

查看模型

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

剃刀页面

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

此项目部署到 Azure 应用服务。

在 Windows 应用服务计划(和我的本地 Windows 10 机器)上,这会按预期产生“1.23 美元”。但是,如果我将同一个项目部署到 Linux 应用服务计划,它会呈现“¤1.23”。

根据谷歌:

货币符号 (¤) 是用于表示未指定货币的字符。

知道这两个操作系统之间有什么区别吗?我是否需要在 Linux 上明确设置文化或其他内容?

标签: c#asp.net-corerazor.net-core

解决方案


这是由于 linux 没有配置 locale 造成的。

您可以在程序中设置线程文化,如下所示:

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

推荐阅读