【问题标题】:Is double is also kind of float?double 也是一种浮点数吗?
【发布时间】:2014-11-06 07:43:20
【问题描述】:

听说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

【问题讨论】:

标签: java types floating-point numbers double


【解决方案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 以获得对浮点精度问题的更准确描述

【讨论】:

    【解决方案2】:

    计算机的浮点单元使用以 2 为底的二进制,而 0.2 不能用二进制精确表示,它被称为中继分数。在 base-2 中,只有分母是 2 的幂的数字才会终止,我认为只有 0.25、0.50 和 0.75,这就是为什么 6.5 显示为“相同”的原因。

    假设您有两种十进制类型,一种有六位有效数字,另一种有十六位。

    你会用什么值来表示每种类型的 pi?在这两种情况下,您都会尝试尽可能接近无法准确表示的数字 - 但您最终不会得到相同的值,对吗?

    float(32 位)和 double(64 位)是一样的——都是二进制浮点类型,但是 double 比 float 具有更高的精度。所以如果你需要精度,那就选择双精度。

    详情请见this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 2012-09-07
      • 2011-10-04
      相关资源
      最近更新 更多