java – 关于float类型的精度

我无法理解为什么会这样
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

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...