1

我现在正在研究一个 android 计算器,但在显示结果时遇到了一些问题......现在使用 string.format 舍入到小数点后 9 位来设置显示......但是虽然这对于显示无限的小数结果是正确的,但在许多其他情况下没有必要,比如

1+2 应该显示 3 而不是 3.000000000;

2.03*3 应该显示 6.09 而不是 6.090000000

  1. 我怎么能这样做?询问程序最后一位是否为0,如果是,用“”代替?
  2. 我如何为每千个地方显示“,”?即输入和答案都是 123,456,789 而不是单独的 123456789?

新问题出现!!

我新发现,在结合建议后,对于 1000 以下的小数字操作,显示的答案是可以的(例如 999 * 999 可能显示 998001)。然而,如果数字结束,显示的答案会变成这样,例如 9999 * 9999 = 9.998001e7。是不是和double的限制有关?如果是这样,怎么解决?

原始编码如下:

    case MULTIPLY:                
        inputnum1 = inputnum.get(0); 
        inputnum2 = inputnum.get(1); 

        inputnum.removeAll(inputnum); 

        inputnum.add(inputnum1 * inputnum2); 

        Display.setText(String.format("%.9f", inputnum.get(0)));  
//
            String str1=Display.getText().toString();
            String stripped1 = Double.valueOf(str1).toString(); 
            Display.setText(stripped1);
//              
            break;

更新后的代码如下:

    private void calculation (int operator) { 

        inputnum.add(Double.parseDouble(Display.getText().toString())); 

        if (operator != EQUALS) {nextOperation = operator;}
        else if (operator == EQUALS){nextOperation = 0;} 

        switch (currentOperation) { 
    case MULTIPLY: 
        inputnum1 = inputnum.get(0); 
        inputnum2 = inputnum.get(1); 

        inputnum.removeAll(inputnum); 

        inputnum.add(inputnum1 * inputnum2); 

        Display.setText(String.format("%.19f", inputnum.get(0)));  

        DecimalFormat myFormatter3 = new DecimalFormat("###,###,###,###,###,###.#########"); 
        String str3=Display.getText().toString(); 
        String stripped3 = Double.valueOf(str3).toString(); 
        stripped3 = myFormatter3.format(Double.valueOf(stripped3)); 
        if (stripped3.endsWith(".0")) 
            stripped3 = stripped3.substring(0, stripped3.length() - 2); 
        Display.setText(stripped3);

类似情况 SUBTRACT: case ADD: case DIVISION:

非常感谢!

4

1 回答 1

2

逗号很容易添加:

public class DecimalFormatDemo {

static public void customFormat(String pattern, double value ) {
  DecimalFormat myFormatter = new DecimalFormat(pattern);
  String output = myFormatter.format(value);
  System.out.println(value + "  " + pattern + "  " + output);
}

static public void main(String[] args) {

  customFormat("###,###.###", 123456.789);
  customFormat("###.##", 123456.789);
  customFormat("000000.000", 123.78);
  customFormat("$###,###.###", 12345.67);  
}
}

我相信零是这样的:

DecimalFormat myFormatter = new DecimalFormat("###,###,###,###.###");
String str1=Display.getText().toString();
String stripped1 = Double.valueOf(str1).toString();
stripped1 = myFormatter.format(Double.valueOf(stripped1));
if (stripped1.endsWith(".0"))
    stripped1 = stripped1.substring(0, stripped1.length() - 2);
Display.setText(stripped1);
于 2012-08-27T14:55:09.720 回答