Decimal.TryParse - 缺少分隔符?

时间:2015-01-15 20:54:51

标签: c# .net decimal tryparse valueconverter

当我使用API​​时,我有一些奇怪的情况。我在JSON中获得了对象,我将其反序列化。该对象包含字符串属性,该属性被解析为十进制。

为此,我使用此代码。我住在波兰,小数分隔符为',',所以我使用替换方法。

string input ="160.00"; //value from API

decimal result;
decimal.TryParse(input.Replace('.',','), out result);

我的结果有时等于16000 !! (我想TryParse方法删除分隔符,它没有确定)。 我该如何防止这种情况?我可以解析

2 个答案:

答案 0 :(得分:6)

无论如何,数字应序列化为InvariantCulture,因此用于解析的InvariantCulture是一个良好的开端。还应检查序列化数字的代码是否遵循此规则

string input ="160.00";
decimal result = decimal.Parse(
    input, 
    System.Globalization.CultureInfo.InvariantCulture);

没有序列化数字作为文化不变量是最常见的问题来源之一,例如它在我的机器上运行我不知道为什么它不在你的...哦,你说你的系统是不同的语言 oops; - )

答案 1 :(得分:5)

您应该使用TryParse方法的正确重载,而不是替换小数点字符,即decimal.TryParse(String, NumberStyles, IFormatProvider, Decimal)

string input ="160.00";
NumberStyles style = NumberStyles.Number;
decimal number = 0;

CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
decimal.TryParse(input, style, culture, out number)

确保指定适合您个人情况的正确文化。