gpt4 book ai didi

java - 将 int 转换为 float 并返回不会给出初始值

转载 作者:行者123 更新时间:2023-12-02 00:58:29 25 4
gpt4 key购买 nike

当我们将 float 转换为 int 时,此代码打印 -46

这是因为在从 int 类型转换为 float 类型的过程中信息丢失了。

int i = 1_234_567_890;
float f = i;
System.out.println(i - (int)f); //print -46
System.out.println(i - f); //print 0.0

如何知道使用 float 和 double 时是否存在精度损失?

在测试之前分析代码如何知道结果?

最佳答案

浮点表示与整数表示有很大不同。

Here you can see this specification (4.2.3. Floating-Point Types)

Here you can see Integer representation

浮点表示使用符号、指数和尾数,而 float 有

  • 符号(1 位)
  • 指数(8 位)
  • 尾数(23 位)

这样,float可以表示的最大值为:340,282,346,638,528,860,000,000,000,000,000,000,000.000000

long 可以表示的最大值为 9,223,372,036,854,775,807

int 可以表示的最大值为:2,147,483,647

因此,在从浮点型到长整型或整数的转换过程中,丢失的信息可能有多个数量级。

在整数到浮点转换期间,您最多可能会丢失 64u。细节,取决于值(value)。例如:

int i = 1_073_741_888;
float f = i;
System.out.println(i - (int)f); //print 64
System.out.println(i - f); //print 0.0

还有

int i = 1_073_742_016;
float f = i;
System.out.println(i - (int)f); //print -64
System.out.println(i - f); //print 0.0

该值的二进制整数表示为:

  • 1_073_741_888:1000000000000000000000001000000
  • 1_073_742_016:1000000000000000000000011000000

当值大于 16777216 时,最低有效位将被舍入(2^24,因为 float 的尾数大小为 -23 位)。

关于java - 将 int 转换为 float 并返回不会给出初始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58838061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com