gpt4 book ai didi

java - java中的浮点到长类型转换问题

转载 作者:行者123 更新时间:2023-12-01 10:17:22 26 4
gpt4 key购买 nike

示例 1:

public class Test {

public static void main(String args[]){
long l1 =8589934592L;
float f1= l1;
long l2= (long)f1;
System.out.println("Input long::"+l1);
System.out.println("Float value::"+f1);
System.out.println("Typecasted value::"+l2);
}
}
Output of for first class:
Input long::8589934592
Float value::8.5899346E9
Typecasted value::8589934592

示例2:

public class Test {

public static void main(String args[]){
long l1 =6788819226L;
float f1= l1;
long l2= (long)f1;
System.out.println("Input long::"+l1);
System.out.println("Float value::"+f1);
System.out.println("Typecasted value::"+l2);
}
}
Output of for second class:
Input long::6788819226
Float value::6.7888195E9
Typecasted value::6788819456

类型转换未正确进行。两个类都有不同的行为。为什么示例 2 在类型转换后具有不同的值。请告知原因?

最佳答案

Float 没有足够的精度来精确编码该数字。如果你使用 double,它会起作用:

public class Test {

public static void main(final String args[]) {
long l1 = 6788819226L;
double f1 = l1;
long l2 = (long) f1;
System.out.println("Input long::" + l1);
System.out.println("Double value::" + f1);
System.out.println("Typecasted value::" + l2);
}
}

输出:

Input long::6788819226
Double value::6.788819226E9
Typecasted value::6788819226

您可以阅读https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3了解 float 的确切局限性。为了给出近似值,最大 2^24 的整数将精确地保存在 float 中,之后它可以是近似值(或精确值,具体取决于数字)。对于 double ,最多为 2^53。

您的第一个示例完全有效的原因是因为 8589934592 是 2 的幂,其近似值等于该数字(如果您阅读规范,您就会理解这一点)。

关于java - java中的浮点到长类型转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35811980/

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