双重也是浮动吗?

时间:2014-11-06 07:43:21

标签: java types floating-point numbers double

我听说double是一种更精确的数据类型,我希望看到double的结果 在以下程序的帮助下,但每次相似但不精确到float时,它仍会给出可变结果 floatdouble之间的区别是什么?何时实时使用它们? 任何机构都可以用简单的术语解释这种情况 并指明这种行为的原因?
在此先感谢:)

  public class DoubleResult {
        public static void main(String[] args) {
            double number=1;
            for(int i=0;i<5;i++){
                number=number+0.1;
                System.out.println(number);
            }
        }

    }

输出:

1.1
1.2000000000000002
1.3000000000000003
1.4000000000000004
1.5000000000000004

2 个答案:

答案 0 :(得分:1)

floatdouble都是浮点数。 float是单精度(32位)浮点,而double是双精度(因此名称)(64位)

Name    Width in Bits   Range
double  64              1.7e–308 to 1.7e+308
float   32              3.4e–038 to 3.4e+038

您可以看到this answer以获得有关浮点精度问题的更准确描述

答案 1 :(得分:0)

计算机的浮点单元与基数2二进制一起工作,0.2不能精确地用二进制表示,它被称为转发器分数。在base-2中,只有具有2的幂的分母的数字终止,我认为只有.25,。50和.75,这就是为什么6.5显示为&#34;相同&#34;。

想象一下,你有两个十进制类型,一个有六位有效数字,一个有十六位。

您将使用什么价值来表示每种类型的pi?在这两种情况下,你都试图接近一个你无法准确表示的数字 - 但你不会得到相同的价值,不是吗?

浮点数(32位)和双精度(64位)相同 - 都是二进制浮点类型,但double比float更精确。所以,如果你需要精确度,那就选择双倍。

有关详细信息,请参阅this