当前位置: 首页 > 知识库问答 >
问题:

.NET Web API返回带许多小数位的double

谷梁凌
2023-03-14

我正在使用。Net Web API返回具有双精度的信息。在返回之前,我将这些双精度整数四舍五入到小数点后两位。当我打印它们时,我得到(f.e):145,92。一切都很好。但是当我返回这个双精度时,我的JSON响应是用这样的双精度创建的:

“小时”:145.92000000000002

你知道是什么造成了这个问题吗?

我的舍入函数是:

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;
    }

谢啦

共有1个答案

蔚和风
2023-03-14

是的,这就是所谓的“双四舍五入”问题。你通过将双进制转换为十进制,对其进行数学运算,然后转换回双进制来获得它。

几个相关链接:

在这里:http://www.exploringbinary.com/double-rounding-errors-in-floating-point-conversions/

此处:除法时的小数舍入误差(C#)

在这里:http://csharpindepth.com/Articles/General/Decimal.aspx

 类似资料:
  • 问题内容: 我需要比较2个日期,并返回2个小数位之间的天数。 例如: 比较时 这是5个小时的时差。所以我会退还0.2天 我试过了: 似乎没有任何工作。 问题答案: 以秒为单位,然后除以。小数点是必需的。

  • 问题内容: 我有一个,我想将用户的输入限制为纯数字或带小数的数字(最多2个小数位)。 基本上,我要输入价格。 我想避免做正则表达式。有办法吗? 问题答案: 代替允许使用小数位数的,而使用允许最多两位的小数。

  • 我想返回一个小数点后有2位的双倍(即123.00)。以下是部分代码。输出始终为123.0。如何得到小数点后两位?

  • 我有一个,我希望将用户的输入限制为纯粹的数字或小数点后2位以下的数字。 基本上,我要求一个价格输入。 我想避免做regex。有办法做吗?

  • 问题内容: 我有一张桌子,看起来像这样: 我试图做一个SELECT命令,结果是这样的: 因此,我需要唯一的名称,但选择所有四个列,其中Col1 =2。我在这里使用解决方案来使唯一的部分正常工作: SQL / mysql- 选择唯一/唯一,但返回所有列? 但是,当我向select语句的WHERE部分添加add时,它不会返回Col1为2的所有名称,因为我认为它首先查找的是一个不同的数字,而不是1,因此

  • 我有一个,我希望将用户的输入限制为纯数字或小数最多2位的数字。 基本上,我要求的是一个价格输入。 我想避免做正则表达式。有办法做到吗?