我正在使用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时是否应该注意一些事项?
提前致谢
答案 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
,具体取决于值的含义。