1

私は現在Android電卓に取り組んでおり、結果の表示に問題があります...表示は小数点以下9桁のstring.format丸めを使用して設定されています...しかし、これは無限の小数点以下の結果を表示する場合に当てはまりますが、他の多くの状況のように必要ではありません

1 + 2は、3.000000000ではなく3を表示する必要があります。

2.03 * 3は、6.090000000ではなく6.09を表示する必要があります

  1. どうすればこれを行うことができますか?プログラムに最後の桁が0かどうかを確認し、0の場合は、「」に置き換えてもらいますか?
  2. 千の場所ごとに「、」を表示するにはどうすればよいですか?つまり、入力と回答の両方に123456789だけではなく、123,456,789を表示できますか?

新たな問題が発生しました!!

提案を組み込んだ後、1​​000未満のような小さな数字の操作では、表示された答えは問題ないことを新たに発見しました(たとえば、999 * 999はおそらく998001を表示します)。しかし、数字が終わった場合、表示される答えは次のようになります(例:9999 * 9999 = 9.998001e7)。ダブルの制限と関係がありますか?もしそうなら、それはどのように解決できますか?

元のコーディングは次のとおりです。

    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:ケースADD:ケース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 に答える