C#json是否转换浮动值?
我正在使用一个使用JSON的Web API,其中我要带回的对象的属性之一是FLOAT类型 将数据插入数据库后,我开始注意到一些奇怪的结果。我刚刚浏览了代码,可以看到float属性“PERSUNQ”的值是:124736684.0 然而,当我使用JSONConvert触摸JSON数据时,该值神奇地变为:124736688.0C#json是否转换浮动值?,c#,json,floating-point,C#,Json,Floating Point,我正在使用一个使用JSON的Web API,其中我要带回的对象的属性之一是FLOAT类型 将数据插入数据库后,我开始注意到一些奇怪的结果。我刚刚浏览了代码,可以看到float属性“PERSUNQ”的值是:124736684.0 然而,当我使用JSONConvert触摸JSON数据时,该值神奇地变为:124736688.0 GRSAPIData = client.DownloadString(GRSURL); <!--- value is correct Rootobject ro
GRSAPIData = client.DownloadString(GRSURL); <!--- value is correct
Rootobject root = (Rootobject)JsonConvert.DeserializeObject<Rootobject>(GRSAPIData); <-- value is magically changed
GRSAPIData=client.DownloadString(GRSURL) 一个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
,具体取决于值的含义。您可以上传JSON和Rootobject类吗?请展示一个简短但完整的程序来演示此问题。我怀疑数据库是否与此相关。是的,问题是我不能发布任何太详细的内容,因为这是一个政府项目,但我会看看我能做些什么:\天哪,这太烦人了。来自供应商的数据模式将该字段作为浮点。我想我得试着把这个换成一个替身。真不敢相信我没看到。谢谢你的回答。