2011-01-26 58 views
2

我的编号显示在EditText中,可以长达20个字符+4小数,然后再过长。我想要的数字比最终显示的数字更长,因此不会被截断。如何使用指数显示DecimalFormat的最大尺寸?

例如:(!只是一个例子)123456789将显示为是 123456789123456789123456太长,将显示为1.123456789E8

我测试了这一点:

DecimalFormat df = new DecimalFormat("#.####"); 
df.setMaximumIntegerDigits(20); 

但经过

20char中,数字只是显示不正确。例如:123456789123456789123456变成了56789123456789123456(中继4的第一个数字)。

谢谢!

回答

0

E用于格式化指数表示法中的数字。那是你在找什么?

new DecimalFormat("####E0") 

我不确定曝光是什么。

+0

如果人数大于或等于10000000000000000000,使用这种格式,否则使用一些其他的格式。如果你正在阅读一个字符串,这很简单,你可以使用这个长度。 – 2011-01-26 19:41:16

0

对不起,Exposant是法国的指数!

这项工作,但我想只有当数字超过20个字符时指数格式。如果它是20或更少的字符,我想要有4位小数,如果有任何...

+0

最好是编辑你的问题,而不是添加这个答案 – AShelly 2011-01-26 21:55:56

3

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条件。

0

谢谢拉尔夫!确切地说,我正在嘲笑!

在这里我做了什么:

MessageFormat df = new MessageFormat("{0,choice,0#{0,number,'#.####'}|9999999999999999999<{0,number,'#.######E0'}}", 
Locale.ENGLISH); 
EditText2.setText(String.valueOf(df.format(new Object[] { Float.valueOf(EditText1.getText().toString()) * 1024})));