Json.NET十进制解析舍入
本文关键字:舍入 十进制 NET Json | 更新日期: 2023-09-27 18:01:53
为什么单个小数得到四舍五入,而数组中的小数没有?
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
FloatParseHandling = FloatParseHandling.Decimal,
Culture = new CultureInfo(string.Empty)
{
NumberFormat = new NumberFormatInfo
{
CurrencyDecimalDigits = 5
}
}
};
string jsonData = "{'"Values'": [0.0,22493194440943108.0]}";
JObject jObject = JObject.Parse(jsonData);
decimal[] arrayOfDecimals = JsonConvert.DeserializeObject<decimal[]>(jObject["Values"].ToString());
decimal singleDecimal = JsonConvert.DeserializeObject<decimal>(jObject["Values"][1].ToString());
Console.WriteLine(JsonConvert.DeserializeObject<decimal[]>(jObject["Values"].ToString())[1]);
Console.WriteLine(JsonConvert.DeserializeObject<decimal>(jObject["Values"][1].ToString()));
输出为:
22493194440943108.022493194440943100
当您调用ToString()
方法时,Json。. NET将创建它所包含的值的格式化字符串。这意味着对于jObject["Values"].ToString()
,你得到:
对于jObject["Values"][1].ToString()
,你得到:
反序列化这些工作,但您可以看到,单一的格式导致一些舍入。如果你真的想调用ToString
然后反序列化你已经反序列化的东西(使用JObject.Parse
),你可以传递Formatting.None
选项-这是预期的工作:
decimal[] arrayOfDecimals = JsonConvert.DeserializeObject<decimal[]>(jObject["Values"].ToString(Newtonsoft.Json.Formatting.None));
decimal singleDecimal = JsonConvert.DeserializeObject<decimal>(jObject["Values"][1].ToString(Newtonsoft.Json.Formatting.None));