Decimal Formater java doc讨论如何处理指数。
科学记数法
数字科学记数法是 表示为尾数 的产物,10的幂,例如,1234 可以表示为1.234×10^3。 尾数通常在1.0 < = x < 10.0范围内,但不一定是。 DecimalFormat可以被指示为 格式并仅通过模式解析科学记数法 ;目前有 没有工厂方法创建科学记数法格式 。在 模式中,指数字符 之后紧跟着一个或多个 数字字符,指示科学符号 表示法。例如:“0。### E0”的格式为 ,编号1234为“1.234E3”。 ...
更困难的部分是如何切换正常和科学记数法。 我已经通过Messageformater内的choide格式嵌入两位小数格式化器做到了这一点:
MessageFormat format = new MessageFormat(
"{0,choice,0#{0,number,'#,##0.####'}|99999<{0,number,'000000.####E0'}}",
Locale.ENGLISH);
(这excample是只有6位小数,但你可以改变它。)
用法的消息格式与小数点格式有点不同,因为格式方法需要一个对象数组。
System.out.println(format.format(new Object[] { 123 }));
它打印的是什么(1,12,123,...)是:
1
1.1
12
123
1,234
12,345
123456E0
123456.7E1
123456.78E2
123456.789E3
123456.789E4
123456.789E5
123456.789E6
您需要调整的格局位,它的20 diget需求相匹配,但方式应该清楚。
即使我已经证明它的工作原理,我会建议实现自己的Formater,它使用2个十进制formater和if条件。
如果人数大于或等于10000000000000000000,使用这种格式,否则使用一些其他的格式。如果你正在阅读一个字符串,这很简单,你可以使用这个长度。 – 2011-01-26 19:41:16