1

我只想显示数字的尾数,而与指数无关。

12.4e-6 after formatting => 12.4

12.4e-12 after formatting => 12.4

手动进行计算是微不足道的。但问题是我需要使用 DeciamalFormat 类,因为我必须将它作为参数提供给另一个类。我试过这个:

DecimalFormat mFormat = (DecimalFormat) NumberFormat.getInstance();
mFormat.applyPattern("#.#E0");

如果我删除 E 符号,则不会计算尾数。有什么办法DecimalFormat只用这个来显示mantissa吗?

4

3 回答 3

0

我很确定您不能,因为您要求 DecimalFormat 显示与您所代表的数字不同的数字

如果您需要字符串格式,为什么不应用 DecimalFormat 来返回字符串 12.4,然后将 e 前面的部分子字符串化?或者只是根据指数相乘?

于 2014-03-25T10:23:33.740 回答
0

要在数字前获得 2 个小数位,在数字后获得 1 个小数位,您可以执行以下操作。

String s = String.format("%4.1f", d / 
                              Math.pow(10, (int) (Math.log10(Math.abs(d)) - 1)));

当然,相信 999 => 之后的数字99.9是 1000 =>10.0只是疯了。

于 2014-03-25T11:06:53.983 回答
0

我找到了以下解决方案:我覆盖了 NumberFormat 类的方法,以便我可以操作如何将 Double 值转换为字符串:

public class MantissaFormat extends NumberFormat {  
@Override
/** Formats the value to a mantissa between [0,100] with two significant decimal places. */
public StringBuffer format(double value, StringBuffer buffer, FieldPosition field) {

String output;
String sign="";

if(!isFixed)
{
    if(value<0)
    {
      sign = "-";
      value = -value;
    }

    if(value!=0) {

        while(value<1) {            
          value *= 100;
        }  
        while(value>100){                   
         value/=100; 
        }    
    }
}
// value has the mantissa only. 
output = sign + String.format( "%.2f", value );    
buffer.append(output);
return buffer;
}

@Override
public Number parse(String string, ParsePosition position) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException();    
}
于 2014-03-26T10:54:50.623 回答