在.NET中,当我从1.35072中减去1.35时,显示为.000719999999。使用double
时,我怎么能得到.00072?
TOTKILO.Text = KILO.Text * TOUCH.Text * 0.01; //here 1.35072
TextBox10.Text = TextBox9.Text * TextBox8.Text * 0.01; //here 1.35
K = Val(TOTKILO.Text) - Val(TextBox10.Text); //here it shows 0.00719999
答案 0 :(得分:5)
取决于你真正的要求。
如果你想要舍入到五位小数,你可以这样做:
double x = 1.35072;
double y = 1.35;
double z = Math.Round(x - y, 5); // 0.00072
另一方面,如果您的目标是始终通过添加/减去十进制数来获得精确结果,请使用decimal
类型而不是double
,因为它本身就是一个基数为10的类型(而不是基2型),因此可以精确地表示以十进制形式表示的数字。
decimal x = 1.35072M;
decimal y = 1.35M;
decimal z = x - y; // 0.00072M
答案 1 :(得分:0)
双打和浮点总是以不同于我们想象的精度来表示。始终将值四舍五入到小数位,然后检查答案。
其他详细信息位于 How To Work Around Floating-Point Accuracy/Comparison Problems 。
答案 2 :(得分:0)
从我所看到的,你几乎从未真正需要double
。几乎所有时间decimal
(System.Decimal
)都能满足您的需要,而且它是一个确切的数字,而不是浮点表示,因此您永远不会遇到这些舍入问题。