Decimal.TryParse - 缺少分隔符?
Decimal.TryParse - missing separator?
当我使用 API 时,我遇到了奇怪的情况。我在 JSON 中得到对象,我将其反序列化。此对象包含解析为十进制的字符串 属性。
为此,我使用了这段代码。我住在波兰,那里的小数点分隔符是',',所以我使用替换方法。
string input ="160.00"; //value from API
decimal result;
decimal.TryParse(input.Replace('.',','), out result);
有时我的结果等于16000!! (我假设 TryParse 方法删除分隔符,它没有确定)。
我怎样才能防止这种情况?我可以解析
您应该使用 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)
确保指定适合您情况的正确区域性。
无论如何,数字都应序列化为 InvariantCulture
,因此用于解析的 InvariantCulture
是一个好的开始。还应检查序列化数字的代码是否遵循此 规则。
string input ="160.00";
decimal result = decimal.Parse(
input,
System.Globalization.CultureInfo.InvariantCulture);
不序列化数字,因为文化不变是最常见的问题来源之一,例如 它在我的机器上运行 我不知道为什么它不在你的机器上......哦你说你的系统使用不同的语言 糟糕 ;-)
当我使用 API 时,我遇到了奇怪的情况。我在 JSON 中得到对象,我将其反序列化。此对象包含解析为十进制的字符串 属性。
为此,我使用了这段代码。我住在波兰,那里的小数点分隔符是',',所以我使用替换方法。
string input ="160.00"; //value from API
decimal result;
decimal.TryParse(input.Replace('.',','), out result);
有时我的结果等于16000!! (我假设 TryParse 方法删除分隔符,它没有确定)。 我怎样才能防止这种情况?我可以解析
您应该使用 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)
确保指定适合您情况的正确区域性。
无论如何,数字都应序列化为 InvariantCulture
,因此用于解析的 InvariantCulture
是一个好的开始。还应检查序列化数字的代码是否遵循此 规则。
string input ="160.00";
decimal result = decimal.Parse(
input,
System.Globalization.CultureInfo.InvariantCulture);
不序列化数字,因为文化不变是最常见的问题来源之一,例如 它在我的机器上运行 我不知道为什么它不在你的机器上......哦你说你的系统使用不同的语言 糟糕 ;-)