decimal.ToString(“ C”)在Linux上生成¤货币符号

时间:2019-07-11 16:26:13

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

我有一个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 App Service。

在Windows App Service计划(和我的本地Windows 10计算机)上,这将产生预期的“ $ 1.23”。但是,如果我将同一项目部署到Linux App Service Plan,它将呈现“¤1.23”。

根据Google:

  

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

您知道这两个操作系统之间有什么区别吗?我是否需要在Linux上明确设置区域性?

2 个答案:

答案 0 :(得分:2)

这是由于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>();
}

答案 1 :(得分:0)

您的代码运行哪种文化?我猜天青不了解当前的文化,而是向您展示了通用货币符号。

我建议您使用此功能,其中provider是您的CultureInfo对象。

public string ToString (string format, IFormatProvider provider);