当我使用API时,我有一些奇怪的情况。我在JSON中获得了对象,我将其反序列化。该对象包含字符串属性,该属性被解析为十进制。
为此,我使用此代码。我住在波兰,小数分隔符为',',所以我使用替换方法。
string input ="160.00"; //value from API
decimal result;
decimal.TryParse(input.Replace('.',','), out result);
我的结果有时等于16000 !! (我想TryParse方法删除分隔符,它没有确定)。 我该如何防止这种情况?我可以解析
答案 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)
确保指定适合您个人情况的正确文化。