.net 核心应用程序在 linux docker 容器中解析小数
.net core app parsing decimals in a linux docker container
以下代码,在 .net core 2.0.0 应用程序中,当应用程序在 windows 开发机器上 运行 时工作正常。
当应用程序部署在 linux docker 容器中时,它失败并显示异常消息:System.FormatException: 'Input string was not in a correct format.'
为什么?解决方法是什么?
class Program {
static void Main(string[] args) {
var value = "1.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 = "1.00";
var valueAsDecimal = decimal.Parse(value, System.Globalization.NumberStyles.Any, USEnglish);
Console.WriteLine(valueAsDecimal);
Console.ReadLine();
}
}
docker 容器 FROM microsoft/dotnet:2.0-runtime AS base
上的默认文化 运行 似乎是不变文化:
以下代码,在 .net core 2.0.0 应用程序中,当应用程序在 windows 开发机器上 运行 时工作正常。 当应用程序部署在 linux docker 容器中时,它失败并显示异常消息:System.FormatException: 'Input string was not in a correct format.'
为什么?解决方法是什么?
class Program {
static void Main(string[] args) {
var value = "1.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 = "1.00";
var valueAsDecimal = decimal.Parse(value, System.Globalization.NumberStyles.Any, USEnglish);
Console.WriteLine(valueAsDecimal);
Console.ReadLine();
}
}
docker 容器 FROM microsoft/dotnet:2.0-runtime AS base
上的默认文化 运行 似乎是不变文化: