2013-01-15 53 views
1

我正在使用模式“#0.00 ##”格式化数字,它对大多数输入都按预期工作。但有时来源编号较小,即:6.84378E-05,并转换为“0,0001”。如何使用DecimalFormat格式化数字(可选科学计数法)

是否可以仅使用科学记数法格式化这些数字(不适用标准模式)?所有“正常”数字保持不变?与单一模式。

我不得不使用一个DecimalFormat模式,没有任何额外的代码。

编辑:为了更好地解释为什么我需要单个DecimalFormat:我正在使用外部库,并且只能定义一个模式来配置输出。

+0

为什么你不能使用多个DecimalFormat的模式?这几乎是我能看到解决这个问题的唯一途径 –

回答

1

你只能有正负values.You不同的模式应该这样做:

public class DecimalScientificFormat extends DecimalFormat { 
    private static DecimalFormat df = new DecimalFormat("#0.00##"); 
    private static DecimalFormat sf = new DecimalFormat("0.###E0"); 

    @Override 
    public StringBuffer format(double number, StringBuffer result, FieldPosition fieldPosition) { 
     String decimalFormat = df.format(number); 
     return (0.0001 != number && df.format(0.0001).equals(decimalFormat)) ? sf.format(number, result, fieldPosition) : result.append(decimalFormat); 
    } 
} 
相关问题