我正在使用。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;
}
谢啦
是的,这就是所谓的“双四舍五入”问题。你通过将双进制转换为十进制,对其进行数学运算,然后转换回双进制来获得它。
几个相关链接:
在这里: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位的数字。 基本上,我要求的是一个价格输入。 我想避免做正则表达式。有办法做到吗?