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);

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