如何在java中检查数字的指数

时间:2011-03-31 06:06:22

标签: java

我想查看程序中生成的数字的指数。 (当我打印时,它们像2.333E-4一样生成)。我想检查哪些数字的指数小于E-4,需要增加10才能达到E-4

任何想法如何实现这一目标?即使有人可以告诉我如何提取指数,也会有所帮助。

3 个答案:

答案 0 :(得分:1)

您可以使用Java docs: Double.doubleToRawLongBits

  

<强> Double.doubleToRawLongBits

     

public static long doubleToRawLongBits(double value)

     

根据IEEE 754浮点“双格式”位布局返回指定浮点值的表示,保留非数字(NaN)值。

     

位63(由掩码0x8000000000000000L选择的位)表示浮点数的符号。

     

第62-52位(由掩码0x7ff0000000000000L选择的位)代表指数。

     

位51-0(由掩码0x000fffffffffffffL选择的位)表示浮点数的有效位数(有时称为尾数)。

所以你可以将double值变为long,向右移动13 * 4(13个十六进制数字= 13 * 4位),然后检查指数值。

此链接有助于解码:IEEE754 double FP format - exponent encoding

答案 1 :(得分:1)

提取指数的另一种方法是使用Java中的对数(基数10)函数(Math.log10(double a))。

对于您提供的输入值,它将返回-3.6320852612062473。对于输入值1e-4,它将返回-4。因此,您可以执行以下操作(假设“number”是您要在下面的代码中测试的double值):

while (Math.log10(number) < -4) {
    number = number * 10;
}

答案 2 :(得分:0)

你可以这样做

double d = 0.01234e-4;
if (d < 1e-4)
    System.out.printf("%fE-4", d * 1e4);
else
    System.out.printf("%g", d);

打印

0.012340E-4