我正在尝试使用此公式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
?
答案 0 :(得分:5)
浮点数不正确。如果两者都减去10.1,则会得到:
1.77635683940025E-15
0
然后天花板将其放大。
答案 1 :(得分:5)
这可能是由于双精度。并非所有的double都可以准确存储,因此有些会被修改为最接近的可存储值。