首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java中检查数字的指数

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

Stack Overflow用户
提问于 2011-03-31 14:06:22
回答 3查看 2.2K关注 0票数 1

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

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

EN

回答 3

Stack Overflow用户

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2011-10-21 11:09:49

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

对于您提供的输入值,它将返回-3.6320852612062473。对于输入值1e -4,它将返回-4。因此,下面是你可以做的(假设"number“是你想在下面的代码中测试的双精度值):

代码语言:javascript
复制
while (Math.log10(number) < -4) {
    number = number * 10;
}
票数 1
EN

Stack Overflow用户

发布于 2011-03-31 15:51:51

你可以做到的

代码语言:javascript
复制
double d = 0.01234e-4;
if (d < 1e-4)
    System.out.printf("%fE-4", d * 1e4);
else
    System.out.printf("%g", d);

打印

代码语言:javascript
复制
0.012340E-4
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5495891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档