相同的值四舍五入给出不同的答案

时间:2019-07-10 03:56:26

标签: c#

我正在尝试使用此公式Math.Ceiling(val * 20) / 20来取整一个值

T1和T2都显示与10.1等效的结果,但是四舍五入的结果不同。

var a1 = 9.06;
var a2 = 1.04;
var b1 = 9.04;
var b2 = 1.06;

var t1 = a1 + a2;
var t2 = b1 + b2;

Console.WriteLine("T1: " + t1);
Console.WriteLine("T2: " + t2);
Console.WriteLine("Rounding T1: " + Math.Ceiling(t1 * 20) / 20);
Console.WriteLine("Rounding T2: " + Math.Ceiling(t2 * 20) / 20);

结果

T1: 10.1
T2: 10.1
Rounding T1: 10.15
Rounding T2: 10.1

为什么T1获得额外的0.05

2 个答案:

答案 0 :(得分:5)

浮点数不正确。如果两者都减去10.1,则会得到:

  1.77635683940025E-15
  0

然后天花板将其放大。

答案 1 :(得分:5)

这可能是由于双精度。并非所有的double都可以准确存储,因此有些会被修改为最接近的可存储值。