如何将 BigDecimal 转换为指数形式?

Posted

技术标签:

【中文标题】如何将 BigDecimal 转换为指数形式?【英文标题】:How to convert BigDecimal to the exponential form? 【发布时间】:2012-02-21 00:01:23 【问题描述】:

如何将 BigDecimal 对象转换为使用指数形式的字符串表示?类似:3.134e67?我查看了 API,发现 toEngineeringString() 但它没有给我想要的。

【问题讨论】:

【参考方案1】:

您是否阅读过 NumberFormat 文档,这是来自 DecimalFormat: 见:http://docs.oracle.com/javase/1.4.2/docs/api/java/text/DecimalFormat.html

科学记数法

科学计数法中的数字表示为 a 的乘积 尾数和 10 的幂,例如 1234 可以表示为 1.234 x 10^3。尾数通常在 1.0

指数字符后的数字字符数给出最小指数位数。没有最大值。消极的 指数使用本地化减号而不是前缀格式化 和模式的后缀。这允许诸如“0.###E0 米/秒”。

解释整数位数的最小和最大数 一起:

如果整数的最大位数大于它们的最小值 number 并且大于 1,它强制指数是的倍数 整数位数的最大数,和的最小数 整数位被解释为 1。最常见的用法是 生成工程符号,其中指数是倍数 三个,例如,“##0.#####E0”。使用这种模式,数字 12345 格式为“12.345E3”,123456 格式为“123.456E3”。

否则,最小整数位数由 调整指数。示例:0.00123 格式为“00.###E0” 产生“12.3E-4”。

尾数中的有效位数是 最小整数和最大小数位数,并且不受 最大整数位数。例如,12345 格式为“##0.##E0” 是“12.3E3”。要显示所有数字,请将有效数字计数设置为 零。有效位数不影响解析。

指数模式可能不包含分组分隔符。

【讨论】:

我试过这个:BigDecimal d = new BigDecimal("55"); DecimalFormat df = new DecimalFormat("0.###E0"); System.out.println(df.format(d.toString()));,但它给了我一个错误:“无法将给定的对象格式化为数字” 现在可以了,我只是用d 替换了d.toString()。谢谢:)【参考方案2】:

这对您有帮助吗?

BigDecimal bd = new BigDecimal(3.134e67);
String.valueOf(bd.doubleValue())

【讨论】:

【参考方案3】:

你在寻找这样的东西吗?

YY ^ XX(修改QQ)

int fastMod(int YY, int XX, int QQ)
    int ZZ;                                             //declare variables
    int RR = 1;

    while (XX != 0)                                    //while XX != 0
        ZZ = XX % 2;                                    //mod XX by 2
        XX= XX/2;                                       //divide XX by 2
        if (ZZ == 1)                                    //if ZZ is one
        RR = (RR * YY) % QQ;                            //mod (RR*YY) by QQ
        YY= (YY * YY) % QQ;                             //mod (YY*YY) by QQ     
    
    return RR;                                          //return int

当您开始使用 GIANT 数字时,您需要使用模运算。 这在生成像 RSA 算法这样的大素数时变得特别有用。 这里介绍了模算术的基础知识: http://www.brainjammer.com/math/modular-arithmetic/

【讨论】:

我不明白。这对将 BigDecimal 转换为指数形式有何帮助? 重点是除非你使用模运算,否则你将无法处理这么大的数字。

以上是关于如何将 BigDecimal 转换为指数形式?的主要内容,如果未能解决你的问题,请参考以下文章

在python中将指数形式的数字转换为十进制形式[重复]

在java中如何将bigdecimal类型转成String类型?

如何摆脱熊猫将excel表中的大数转换为指数?

BigDecimal类的加减乘除

java - 如何将浮点数转换为 BigDecimal? [复制]

以指数形式表示数字