以下代码的输出为“1.4E-45 3.4E24”。为什么2e-45f显示为1.4e-45?

时间:2015-02-04 14:54:00

标签: java

class Test
{
public static void main(String [] args) {
  float a;
  a = 2e-45f;
  double b = 34e23;
  System.out.println(a + "  " + b); // prints "1.4E-45 3.4E24"
 }
}

此代码用于理解java中的指数表示法。

3 个答案:

答案 0 :(得分:1)

float a;
a=2e-45f;

a的值超过或小于float可以接受的最小数字。请查看here

  

MIN_VALUE - 保持最小正非零值的常量   键入float,2 ^( - 149)。

2^(-149) = ~1.4e-45

答案 1 :(得分:0)

浮点数不能保存所有实数的值。如果你需要那种精度,请使用BigDecimal。

答案 2 :(得分:0)

问题是你超出了漂浮的范围。

  

float:4个字节,IEEE 754.涵盖范围从1.40129846432481707e-45到3.40282346638528860e + 38(正面或负面)。

a=2.0e-44f;效果很好。