如何在使用指数显示之前确定DecimalFormat的最大大小?

时间:2011-01-26 19:23:02

标签: java android numbers decimal

我在EditText中显示的数字在它太长之前可以达到20个字符+4个小数。我想要的数字比最后显示的de exposant更长,所以它不会被截断。

ex:123456789将按原样显示 123456789123456789123456太长,将显示为1.123456789E8(仅作为示例!)

我测试了这个:

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

但是在20char之后,数字才正确显示。例如:123456789123456789123456成为56789123456789123456(中继4位数。)

谢谢!

4 个答案:

答案 0 :(得分:4)

Decimal Formater java doc描述了如何处理Exponent。

  

科学记数法

     

科学记数法中的数字是   表示为尾数的乘积   和十的权力,例如,1234   可以表示为1.234 x 10 ^ 3。该   尾数通常在1.0 <=的范围内   x&lt; 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);

(此示例仅有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要求匹配的模式,但方法应该清楚。

即使我已经证明它有效,我也会建议使用2个十进制格式和if条件来实现自己的Formater。

答案 1 :(得分:0)

E用于以指数表示法格式化数字。这就是你要找的东西吗?

new DecimalFormat("####E0") 

我不确定暴露者是什么。

答案 2 :(得分:0)

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

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

答案 3 :(得分: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})));