加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 关于float类型的精度

发布时间:2020-12-14 06:02:57 所属栏目:Java 来源:网络整理
导读:我无法理解为什么会这样 float f = Integer.MAX_VALUE;System.out.println(Integer.MAX_VALUE);System.out.println((int)f); 产生相同的线, 以及为什么这样做 Float f2 = (float) Integer.MAX_VALUE;System.out.println(Integer.MAX_VALUE);System.out.print
我无法理解为什么会这样
float f = Integer.MAX_VALUE;
System.out.println(Integer.MAX_VALUE);
System.out.println((int)f);

产生相同的线,

以及为什么这样做

Float f2 = (float) Integer.MAX_VALUE;
System.out.println(Integer.MAX_VALUE);
System.out.println(f2.intValue());

我的意思是,浮点数的尾数长度是2 ^ 23-1.它如何设法保持整数的max_value,即2 ^ 31 – 1?

解决方法

How does it manage to keep max_value of integer,which is 2^31 – 1?

它实际上没有. f的值是2147483648.

但是,narrowing primitive conversion从float到int钳位该值.它到达这一部分:

  • Otherwise,one of the following two cases must be true:

    • The value must be too small (a negative value of large magnitude or negative infinity),and the result of the first step is the smallest representable value of type int or long.

    • The value must be too large (a positive value of large magnitude or positive infinity),and the result of the first step is the largest representable value of type int or long.

通过使数字更大,您可以轻松地看到这一点:

float f = Integer.MAX_VALUE;
f = f * 1000;
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println((int)f); // 2147483647

或者通过铸造来代替,显然不需要在同一点夹紧:

float f = Integer.MAX_VALUE;
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println((long)f); // 2147483648

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读