1

私は現在電卓に取り組んでおり、小数点以下の桁数を除いてすべて正常に動作します。

電卓には実際には 2 つのディスプレイが含まれています。1 つは実際の操作用の fakedisplay と呼ばれ、もう 1 つは目的の形式を表示するための Display と呼ばれます。つまり、カンマを追加します。

12345.678を押すと、ディスプレイはfakedisplayに従い、12,345.678として表示されますが、12345.009を押すと、fakedisplayは12345.009として正常に動作しますが、ディスプレイは9が押されるまで12,345のままスタックし、その時点では12,345.009が正常に表示されます。

ただし、ユーザーが 0 を押しても応答がなく、9 を押すまでは 009 がすぐに追加されるのは奇妙です。

これは解析コードから生じることは知っていますが、これに基づいて、次のコードをどのように修正できますか? 私は本当に解決策を考えることはできません...すべてのアドバイスに感謝します!

one.setOnClickListener(new View.OnClickListener() {
    if (str.length()<15) {
        Fakedisplay.append("1");
    }

    DecimalFormat myFormatter1 = new DecimalFormat("###,###,###,###.#################"); 
    String str1=Fakedisplay.getText().toString(); 
    String stripped1 = Double.valueOf(str1).toString(); 
    stripped1 = myFormatter1.format(Double.valueOf(stripped1)); 

    if (stripped1.endsWith(".0")) 
        stripped1 = stripped1.substring(0, stripped1.length() - 2); 

    Display.setText(stripped1);
}
4

1 に答える 1

0

おそらく最も簡単な解決策は、キーストロークごとにコード内の を削除しないことです...0

代わりに、ユーザーが結果を要求したときに、末尾のゼロのみを取り除きます (もちろん小数点があると仮定します) 数字キー0から9、小数点.、または符号変更キー+/-(入力キーと呼びます) などの入力キーは結果を生成しないため、末尾のゼロを削除しないでください。

+ただし、電卓のまたはを押すなどの非入力キーは-=数値を自由に変更できます。

これにより、ユーザーが入力した数字が表示されますが、必要に応じて末尾のゼロが取り除かれます。

ステートメントを変更することでそれを行うことができます(前述のように、ユーザーが非入力キーを押したときにのみこれを行います):

stripped1 = stripped1.replaceAll("(\\.[0-9]*[1-9])0+$","$1");
stripped1 = stripped1.replaceAll("\\.0$","");

最初のステートメントは、10 進数の末尾にあるすべての末尾のゼロを削除します (実際に整数の場合は on を除きます)。2番目はそのケースを処理します。

もう少し考えれば間違いなく1つの置換を行うことができますが、機能させるにはそれで十分なはずです.

于 2015-07-30T07:02:35.250 に答える