Сейчас я работаю над калькулятором 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. Это связано с ограничением двойного числа? если так, то как это можно решить?
исходный код выглядит следующим образом:
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:
Большое спасибо!