c# - 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 上明确设置文化或其他内容?
解决方案
这是由于 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>();
}
推荐阅读
- javascript - 来自chart.js的垂直对齐条形图不起作用
- react-native - 如何检测被包裹的单词
React Native 中的组件 - ios - 指南针应用程序是否需要从用户那里获得位置许可?
- android - 如何正确访问 firestore 中的文档名称以填充 RecyclerView?
- c# - 提供多线程或任务创建
- javascript - JS:在循环中的push()之后更新最新添加元素的属性未分配正确的值
- c++ - 从 std::vector 中的每个对象调用重载函数
- reactjs - 调用了 React 上下文操作,但存储未更新(无 Redux / React Context / React Hooks)
- vba - 如何使用 vba 创建查询并根据用户在表单中键入的内容执行查询?
- java - E/AndroidRuntime:致命异常:AsyncTask #3