我现在正在研究一个 android 计算器,但在显示结果时遇到了一些问题......现在使用 string.format 舍入到小数点后 9 位来设置显示......但是虽然这对于显示无限的小数结果是正确的,但在许多其他情况下没有必要,比如
1+2 应该显示 3 而不是 3.000000000;
2.03*3 应该显示 6.09 而不是 6.090000000
- 我怎么能这样做?询问程序最后一位是否为0,如果是,用“”代替?
- 我如何为每千个地方显示“,”?即输入和答案都是 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:
非常感谢!