C# .net核心应用程序在linux docker容器中解析小数
在.net core 2.0.0应用程序中,当应用程序在windows开发计算机上运行时,以下代码可以正常工作。 当应用程序部署在linux docker容器中时,它会失败,并显示异常消息:System.FormatException:“输入字符串的格式不正确。” 为什么??解决办法是什么C# .net核心应用程序在linux docker容器中解析小数,c#,parsing,.net-core,cross-platform,globalization,C#,Parsing,.net Core,Cross Platform,Globalization,在.net core 2.0.0应用程序中,当应用程序在windows开发计算机上运行时,以下代码可以正常工作。 当应用程序部署在linux docker容器中时,它会失败,并显示异常消息:System.FormatException:“输入字符串的格式不正确。” 为什么??解决办法是什么 class Program { static void Main(string[] args) { var value = "$291.00"; var valueAs
class Program {
static void Main(string[] args) {
var value = "$291.00";
var valueAsDecimal = decimal.Parse(value, System.Globalization.NumberStyles.Any);
Console.WriteLine(valueAsDecimal);
Console.ReadLine();
}
}
货币符号是特定于区域设置的。你检查过文化设置是什么吗 如果总是要使用“$”和“.”,请使用格式提供程序
var valueAsDecimal = decimal.Parse(
value,
NumberStyles.Any,
new CultureInfo("en-AU");
这是有效的代码。我必须手动设置正确的文化。 感谢Richard Schneider和Evk为您提供的指导意见
class Program {
static readonly CultureInfo USEnglish = new CultureInfo("en-US");
static void Main(string[] args) {
var value = "$291.00";
var valueAsDecimal = decimal.Parse(value, System.Globalization.NumberStyles.Any, USEnglish);
Console.WriteLine(valueAsDecimal);
Console.ReadLine();
}
}
microsoft/dotnet:2.0-runtime AS base中docker容器上运行的默认区域性似乎是不变区域性:
由于解析时不指定区域性,因此它使用当前区域性进行解析。解析时始终提供区域性。如果您正在运行基于alpine的dotnet运行时映像,则还需要安装ICU cultures包并在dockerfile中禁用全球化不变模式:RUN apk add--no cache ICU libs ENV dotnet_SYSTEM_Globalization_Invariant=false
Reference: