我在EditText中显示的数字在它太长之前可以达到20个字符+4个小数。我想要的数字比最后显示的de exposant更长,所以它不会被截断。
ex:123456789将按原样显示 123456789123456789123456太长,将显示为1.123456789E8(仅作为示例!)
我测试了这个:
DecimalFormat df = new DecimalFormat("#.####");
df.setMaximumIntegerDigits(20);
但是在20char之后,数字才正确显示。例如:123456789123456789123456成为56789123456789123456(中继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})));