gpt4 book ai didi

java - 使用java的浮点值精度丢失

转载 作者:搜寻专家 更新时间:2023-11-01 00:59:17 26 4
gpt4 key购买 nike

下面给出了测试代码及其输出。当我从数字值中获取浮点值时,精度会丢失。谁能告诉我为什么会出现这种行为以及如何处理这种情况?

public static void main(String[] args)
{
try
{
java.lang.Number numberVal = 676543.21;
float floatVal = numberVal.floatValue();
System.out.println("Number value : " + numberVal);
System.out.println("float value : " + floatVal);
System.out.println("Float.MAX_VALUE : " + Float.MAX_VALUE);
System.out.println("Is floatVal > Float.MAX_VALUE ? " + ( floatVal > Float.MAX_VALUE));
}catch(Exception e)
{
e.printStackTrace();
}
}

输出:

    Number value    : 676543.21
float value : 676543.2
Float.MAX_VALUE : 3.4028235E38
Is floatVal > Float.MAX_VALUE ? false

还有为什么浮点值小于 Float.MAX_VALUE?

最佳答案

float 通常最多 6 位有效数字。您的电话号码是 676543.21,它有 8 位有效数字。您看到超过 6 位的错误,并且您执行的计算越多,这些错误将很容易传播到更多有效数字。如果您重视您的理智(或精确度),请使用 double。 float 甚至不能准确地数过 1000 万。

现在,您有 2 位有效数字,这对我来说表明您有可能想要表示货币 - 请勿。使用您自己的类,该类在内部使用定点算术表示值。

现在,关于 Float.MAX_VAL,它是 3.4028235E38,意思是 3.4028235*10^38,大约是您的值的 10^32 倍。注意到里面的“E”了吗?这是指数。

关于java - 使用java的浮点值精度丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11825719/

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