当我使用API时,我遇到了奇怪的情况。我在JSON中获得对象,并将其反序列化。此对象包含字符串属性,该属性被解析为十进制。
为了做到这一点,我使用了以下代码。我住在波兰,十进制分隔符是',',所以我使用替换方法。
string input ="160.00"; //value from API
decimal result;
decimal.TryParse(input.Replace('.',','), out result);
有时我的结果是等于16000!!(我认为TryParse方法删除分隔符,但未确定)。我怎样才能防止这种情况发生?我能分析一下吗
发布于 2015-01-15 21:05:23
无论如何,数字应该序列化为InvariantCulture
,所以用于解析的InvariantCulture
是一个很好的开始。还应检查序列化数字的代码是否遵循此规则。
string input ="160.00";
decimal result = decimal.Parse(
input,
System.Globalization.CultureInfo.InvariantCulture);
不将数字序列化为区域性不变是最常见的问题之一,就像它在我的机器上运行--我不知道为什么它不在您的机器上.哦,你说你的系统是在另一种语言中运行的;-)
发布于 2015-01-15 20:59:18
您应该使用适当的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)
确保指定适合您的情况的正确的区域性。
https://stackoverflow.com/questions/27972804
复制相似问题