Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中检查数字的指数_Java - Fatal编程技术网

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

如何在java中检查数字的指数,java,Java,我想检查程序中生成的数字的指数。(当我打印时,它们像2.333E-4一样生成)。我想检查哪些数字的指数小于E-4,需要乘以10,直到它们达到E-4 有什么办法可以做到这一点吗?即使有人能告诉我如何提取指数,也会很有帮助。您可以使用 Double.Double或awlongbits public static long double或awlongbits(双值) 根据IEEE 754浮点“双格式”位布局返回指定浮点值的表示形式,保留非数字(NaN)值 位63(掩码0x80000000000000L

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

有什么办法可以做到这一点吗?即使有人能告诉我如何提取指数,也会很有帮助。

您可以使用

Double.Double或awlongbits

public static long double或awlongbits(双值)

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

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

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

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

因此,您可以将双精度值转换为一个长的13*4(13个十六进制数字=13*4位)的右移,并以这种方式检查指数值

此链接有助于解码:

您可以这样做

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

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

对于您给出的输入值,它将返回-3.6320852612062473。对于输入值1e-4,它将返回-4。因此,您可以这样做(假设“number”是要在下面的代码中测试的双倍值):

while(数学日志10(数字)<-4){
数字=数字*10;
}

为什么不能使用
而(num<0.0001)num=num*10?但要注意精度。您要更改数值还是以不同的格式设置?我首先要检查指数值,然后更改数值。
0.012340E-4
while (Math.log10(number) < -4) {
    number = number * 10;
}