gpt4 book ai didi

java - long值如何适应Java中的float数据类型而不损失精度

转载 作者:行者123 更新时间:2023-11-30 10:25:43 24 4
gpt4 key购买 nike

long 值如何适应 Java 中的 float 数据类型而不损失精度。因为如果有精度损失,那么下面的代码片段应该会产生

long lMax = Long.MAX_VALUE;
float f = lMax;
System.out.println(lMax == f);

Output
true

最佳答案

问题是,为了比较 longfloatlong 值被转换为 float ,并且发生了与赋值中相同的精度损失......

如果您想“检测”精度损失,请尝试使用 BigDecimal,如下所示:

System.out.println(new BigDecimal(lMax).compareTo(new Bigdecimal(f)));

我知道构造函数 BigDecimal(double) 会将 float 转换为 double 但不会丢失精度...

编辑

对于大多数人来说,long 似乎比 float 更“精确”。但是 float 的范围是 +/-10^38,这比 long 的...

大得多

测试

long lMax = Long.MAX_VALUE;
float f = lMax;
System.out.println( lMax == f );
System.out.println( new BigDecimal( lMax ).compareTo( new BigDecimal( f ) ) );
System.out.println( ( (Float) f ).longValue() == lMax );
System.out.println( ( (Long) lMax ).floatValue() == f );
System.out.printf( "%d, %d%n", ( (Float) f ).longValue(), lMax );

f = --lMax;
System.out.println( lMax == f );
System.out.println( new BigDecimal( lMax ).compareTo( new BigDecimal( f ) ) );
System.out.println( ( (Float) f ).longValue() == lMax );
System.out.println( ( (Long) lMax ).floatValue() == f );
System.out.printf( "%d, %d%n", ( (Float) f ).longValue(), lMax );

输出:

true
-1
true
true
9223372036854775807, 9223372036854775807
true
-1
false
true
9223372036854775807, 9223372036854775806

关于java - long值如何适应Java中的float数据类型而不损失精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46020495/

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