我想检查在我的程序中生成的数字的指数。(当我打印时,它们像2.333E-4一样生成)。我想检查哪些数字的指数小于E-4,这需要乘以10来增加,直到它们达到E-4。
有什么办法可以做到这一点吗?即使有人能告诉我如何提取指数,这也是有帮助的。
发布于 2011-03-31 14:55:40
您可以使用Java docs: Double.doubleToRawLongBits
Double.doubleToRawLongBits
public static long doubleToRawLongBits(double value)
根据IEEE754浮点“双精度格式”位布局返回指定浮点值的表示形式,并保留非数字(NaN)值。
位63 (掩码0x8000000000000000L选择的位)表示浮点数的符号。
位62-52 (掩码0x7ff0000000000000L选择的位)表示指数。
位51-0 (由掩码0x000fffffffffffffL选择的位)表示浮点数的有效数(有时称为尾数)。
所以你可以把双精度值转换成一个长的,向右移位13*4 (13个十六进制数字= 13*4位),然后用这种方式检查指数值。
这个链接将有助于解码:IEEE754 double FP format - exponent encoding
发布于 2011-10-21 11:09:49
提取指数的另一种方法是使用对数(以10为底)函数(Java语言中的Math.log10(双a) )。
对于您提供的输入值,它将返回-3.6320852612062473。对于输入值1e -4,它将返回-4。因此,下面是你可以做的(假设"number“是你想在下面的代码中测试的双精度值):
while (Math.log10(number) < -4) {
number = number * 10;
}发布于 2011-03-31 15:51:51
你可以做到的
double d = 0.01234e-4;
if (d < 1e-4)
System.out.printf("%fE-4", d * 1e4);
else
System.out.printf("%g", d);打印
0.012340E-4https://stackoverflow.com/questions/5495891
复制相似问题