如何在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;
}