我想查看程序中生成的数字的指数。 (当我打印时,它们像2.333E-4
一样生成)。我想检查哪些数字的指数小于E-4
,需要增加10才能达到E-4
。
任何想法如何实现这一目标?即使有人可以告诉我如何提取指数,也会有所帮助。
答案 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位),然后检查指数值。
答案 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