如何将 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 转换为指数形式?的主要内容,如果未能解决你的问题,请参考以下文章
在java中如何将bigdecimal类型转成String类型?