-1
System.out.println((26.55f/3f));

或者

System.out.println((float)( (float)26.55 / (float)3.0 ));

等等

返回结果 8.849999。不是应有的 8.85。

任何人都可以解释这一点,还是我们都应该避免使用浮点数?

4

4 回答 4

8

每个程序员都应该知道的关于浮点运算的知识

问:为什么我的数字,比如 0.1 + 0.2 加起来不是很好的 0.3,而是得到一个奇怪的结果,比如 0.30000000000000004?

答:因为在内部,计算机使用的格式(二进制浮点)根本无法准确表示 0.1、0.2 或 0.3 之类的数字。

链接网站上的深入解释

于 2010-04-26T14:09:04.127 回答
2

看看维基百科关于浮点的文章,特别是准确性问题部分。

浮点数不能精确地表示所有实数,浮点运算也不能精确地表示真正的算术运算,这一事实导致了许多令人惊讶的情况。这与计算机通常表示数字的有限精度有关。

这篇文章提供了几个例子,应该提供更多的清晰度。

于 2010-04-26T14:04:59.203 回答
2

解释很简单:浮点数是一种二进制格式,因此只能精确表示1.0 / (2 to the Nth power)某个自然整数的整数倍的值N26.55没有这个属性,因此无法准确表示。

如果您需要精确的表示(例如,您的代码是关于会计和金钱的,每一分之一都很重要),那么您确实必须避免浮点数,而支持其他类型,以保证您需要的值的精确表示(取决于您的应用程序,例如,仅根据整数美分进行所有会计处理就足够了)。浮点数(如果使用得当且谨慎使用!-)非常适合工程和科学计算,其中输入值在任何情况下都永远不会“无限精确”,因此精确表示的计算繁琐负担绝对不值得承担。

于 2010-04-26T14:08:41.440 回答
0

好吧,我们都应该避免在现实的情况下使用花车,但这是另一天的故事。

问题是浮点数不能准确地表示我们认为在表示中微不足道的大多数数字。8.850000 可能无法用浮点数精确表示;也可能不是两倍。这是因为它们实际上不是十进制数。而是二进制表示。

于 2010-04-26T14:04:53.227 回答