C# .NET Web API返回的双精度值包含大量小数点
我正在使用.NETWebAPI返回具有双重属性的信息。在我返回之前,我将这些双精度整数四舍五入到小数点后两位。当我打印它们时,我得到(f.e):145,92。太好了。但当我返回该double时,我的JSON响应将创建一个double,如下所示: “小时数”:145.9200000000002 你知道是什么造成了这个问题吗 我的取整功能是:C# .NET Web API返回的双精度值包含大量小数点,c#,.net,json,double,rounding,C#,.net,Json,Double,Rounding,我正在使用.NETWebAPI返回具有双重属性的信息。在我返回之前,我将这些双精度整数四舍五入到小数点后两位。当我打印它们时,我得到(f.e):145,92。太好了。但当我返回该double时,我的JSON响应将创建一个double,如下所示: “小时数”:145.9200000000002 你知道是什么造成了这个问题吗 我的取整功能是: public double ApplyRounding(double value, int digits) { decimal dec
public double ApplyRounding(double value, int digits)
{
decimal decValue = (decimal)value;
// First round is to fix rounding errors by changing things like 0.99499999999999 to 0.995
decValue = Math.Round(decValue, digits + 5, MidpointRounding.AwayFromZero);
decValue = Math.Round(decValue, digits, MidpointRounding.AwayFromZero);
return (double)decValue;
}
谢谢是的,这就是所谓的“双舍入”问题。将双精度转换为十进制,对其执行数学运算,然后再转换回双精度,就得到了双精度
一些相关链接:
在这里:
在这里:
这里:这就是C#如何解释
double
<关于小数,code>double的浮点精度与float
的浮点精度不同。使用float
更精确地表示十进制数。@AlexBarac你是说decimal
而不是float
?@oleksii不。。。我曾经在一个伪随机生成器程序上工作过,它在double
上的性能很差,在float
上的性能很好,因为double
操作会产生舍入问题,这似乎也是OP遇到的问题。谢谢,这很有帮助。我用十进制而不是double->decimal->double解决了这个问题。现在,我的JSON是用正确的小数位数创建的