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