1

我现在正在做一个计算器,除了小数点外,一切都很好。

计算器实际上包含2个显示,一个叫做fakedisplay,用于实际操作,一个叫做Display,用于呈现所需的格式,即添加逗号。

按下 12345.678 时,Display 会跟随 fakedisplay 并显示为 12,345.678,但如果我按下 12345.009,fakedisplay 将正常工作为 12345.009,但 Display 卡在 12,345 直到按下 9,此时它会正常显示 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$","");

第一条语句删除十进制数末尾的所有尾随零(如果它真的是整数,则除外)。第二个负责处理这种情况。

毫无疑问,如果我多考虑一下,我可以做一个替换,但这应该足以让它发挥作用。

于 2015-07-30T07:02:35.250 回答