C#JSONConvert更改浮点值?

时间:2015-12-03 13:42:09

标签: c# json floating-point

我正在使用JSON使用Web API,其中我带回的对象的一个​​属性是FLOAT类型。

将数据插入数据库后,我开始注意到一些奇怪的结果。我刚刚介绍了代码,我可以看到float属性的值" PERSUNQ":124736684.0。

但是,在我使用JSONConvert触摸JSON数据的那一刻,该值神奇地变为:124736688.0

 GRSAPIData = client.DownloadString(GRSURL);   <!--- value is correct

 Rootobject root = (Rootobject)JsonConvert.DeserializeObject<Rootobject>(GRSAPIData); <-- value is magically changed

上面的两行是一个接一个(中间没有代码),我确认你到处检查过,我自己也没有改变这个值。

在处理可以解释这种行为的浮点数时,在使用JSONConvert时是否应该注意一些事项?

提前致谢

1 个答案:

答案 0 :(得分:2)

float只有7位精度 - 这会导致您看到的问题。您可以在不涉及JSON的情况下看到这一点:

using System;

class Program
{
    static void Main(string[] args)
    {
        float f = 124736684.0f;
        Console.WriteLine(f.ToString("r")); // Round-trip
    }
}

输出:

124736688

基本上,与124736684最接近的可表示float值为124736688。

看起来您应该使用double代替 - 或者可能使用decimal,具体取决于值的含义。