17

我有一个小数解析的简单问题。以下代码在我的计算机上运行良好,但是当我在服务器(VPS、Windows Server 2008 R2 标准版)上发布项目时,我收到错误“输入字符串格式不正确”。有什么想法有什么问题吗?

我将该解析后的数字存储在 MySQL DB 表中 - 列类型是DECIMAL(10, 4)

源代码:

CultureInfo nonInvariantCulture = new CultureInfo("en-AU"); //or pl-PL
nonInvariantCulture.NumberFormat.NumberDecimalSeparator = ".";
Thread.CurrentThread.CurrentCulture = nonInvariantCulture;
string toConvert = ("3,4589").Replace(",", "."); //it's an example
decimal parsed = decimal.Parse(toConvert);
4

3 回答 3

38

如果您知道数字的字符串表示形式使用逗号作为小数分隔符,则可以使用自定义解析该值NumberFormatInfo

var number = "3,4589";
var numberFormatInfo = new NumberFormatInfo { NumberDecimalSeparator = "," };
var value = Decimal.Parse(number, numberFormatInfo);

您也可以将现有CultureInfo的文化用于您知道会起作用的文化,pl-PL但我认为这更容易理解。

另一方面,如果数字的格式是3.4589您可以简单地使用CultureInfo.InvariantCulture它,您可以考虑一种基于以下的“默认”文化en-US

var number = "3.4589";
var value = Decimal.Parse(number, CultureInfo.InvariantCulture);
于 2013-04-09T08:47:12.320 回答
5

您可以构建一个自定义NumberFormatInfo来解析您的值

这些线上的东西

NumberFormatInfo numinf = new NumberFormatInfo();
numinf.NumberDecimalSeparator= ",";    
decimal.Parse("3,4589", numinf);
于 2013-04-09T08:48:10.933 回答
4

我猜想通过以下代码解决问题。

decimal parsed = decimal.Parse(toConvert, CultureInfo.InvariantCulture);
于 2013-04-09T08:55:28.967 回答