如何将 BigDecimal 对象转换为使用指数形式的字符串表示?像:3.134e67
?我查看了 API 并找到了toEngineeringString()
,但它并没有给我想要的东西。
3 回答
您是否阅读过 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”。要显示所有数字,请将有效数字计数设置为零。有效位数不影响解析。
指数模式可能不包含分组分隔符。
这对你有帮助吗?
BigDecimal bd = new BigDecimal(3.134e67);
String.valueOf(bd.doubleValue())
你在寻找这样的东西吗?
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/