2

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

4

3 回答 3

6

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

科学计数法

科学计数法中的数字表示为尾数和十次方的乘积,例如,1234 可以表示为 1.234 x 10^3。尾数通常在 1.0 <= x < 10.0 的范围内,但并非必须如此。只能通过模式指示 DecimalFormat 格式化和解析科学记数法;目前没有创建科学记数法格式的工厂方法。在一个模式中,紧跟一个或多个数字字符的指数字符表示科学记数法。示例:“0.###E0”将数字 1234 格式化为“1.234E3”。

  • 指数字符后的数字字符数给出最小指数位数。没有最大值。负指数使用本地化减号格式化,而不是模式中的前缀和后缀。这允许诸如“0.###E0 m/s”之类的模式。

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

    • 如果最大整数位数大于其最小位数且大于 1,则强制指数为最大整数位数的倍数,并将最小整数位数解释为 1。最常见的使用它来生成工程符号,其中指数是三的倍数,例如“##0.#####E0”。使用此模式,数字 12345 格式化为“12.345E3”,而 123456 格式化为“123.456E3”。

    • 否则,通过调整指数来实现最小整数位数。示例:使用“00.###E0”格式化的 0.00123 产生“12.3E-4”。

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

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

于 2012-02-21T00:08:13.813 回答
2

这对你有帮助吗?

BigDecimal bd = new BigDecimal(3.134e67);
String.valueOf(bd.doubleValue())
于 2012-02-21T00:30:26.807 回答
0

你在寻找这样的东西吗?

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/

于 2012-02-21T00:05:22.160 回答