实现:将一个大数转为科学计数法并保留两位小数打印
BigInteger scienceNum = new BigInteger("12345678901234567890");
System.out.printf("%.2e",scienceNum.doubleValue());
/** 打印结果:
1.23e+19
*/
这里借用到了printf这个方法,参考JKD源码util包下的Formatter类,可以看到如下几个参数的介绍。

对于上面的参数,我重点圈出两部分。
第一部分:
o => 八进制
d => 十进制
x/X => 十六进制
这三个都是常用的,使用方法都是调用printf方法,然后第一个参数是"%*",第二个参数是要转化的数
System.out.printf("%o",8);
System.out.println();
System.out.printf("%d",10);
System.out.println();
System.out.printf("%x",16);
System.out.println();
/** 打印结果:
10
10
10
*/
第二部分:
接下来看一下 e/E 这个参数的具体用法。
Java语言的Double类型(注意是包装类型,而不是基本数据类型),在(10^-3, 10^7]范围内是正常表示,超出这个范围后,就会转为科学技术法表示.有些时候,并不想要科学计数法。鉴于此,看过源码后我设计了如下测试用例,大家可以自行理解一下。
Double smallDouble = 0.0001; // 小于10^-3
Double bigDouble = 12345678.00; // 大于等于 10^7
System.out.println("-----------smallDouble-------------");
System.out.println("正常打印:\n"+smallDouble);
System.out.println("toString打印:\n"+smallDouble.toString());
System.out.println("科学计数法保留两位小数打印:");
System.out.printf("%.2e",smallDouble);
System.out.println();
System.out.println("对小于10^-3的还原打印:");
System.out.printf("%.1g",smallDouble);
System.out.println();
System.out.println("-----------bigDouble-------------");
System.out.println("正常打印:\n"+bigDouble);
System.out.println("toString打印:\n"+bigDouble.toString());
System.out.println("科学计数法保留两位小数打印:");
System.out.printf("%.2e",bigDouble);
System.out.println();
System.out.println("对大于等于10^7的还原打印:");
System.out.printf("%.10g",bigDouble);
/** 打印结果如下:
-----------smallDouble-------------
正常打印:
1.0E-4
toString打印:
1.0E-4
科学计数法保留两位小数打印:
1.00e-04
对小于10^-3的还原打印:
0.0001
-----------bigDouble-------------
正常打印:
1.2345678E7
toString打印:
1.2345678E7
科学计数法保留两位小数打印:
1.23e+07
对大于等于10^7的还原打印:
12345678.00
*/
博客介绍了在Java中实现将大数转为科学计数法并保留两位小数打印的方法。借助printf方法,参考JDK源码util包下的Formatter类,介绍了常用进制转换参数,还说明了Double类型在特定范围外会用科学计数法表示,并给出测试用例。
1690

被折叠的 条评论
为什么被折叠?



