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

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

【问题讨论】:

    标签: java bigdecimal number-formatting exponential


    【解决方案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 转换为指数形式有何帮助?
      • 重点是除非你使用模运算,否则你将无法处理这么大的数字。
      猜你喜欢
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多