Как заменить двойное на строку - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть приложение, которое показывает строку в EditText, эта строка является результатом операции двух других типов пользователя double в двух разных EditTexts. Проблема в том, что я хочу, чтобы результат операции отображался в третьем EditText, но для этого он должен быть строкой. Поэтому я изменяю результат методом toString.

Проблема начинается здесь, я хочу, чтобы double, который будет строкой, имел только один десятичный знак. Для этого я использовал DecimalFormat и создал формат df "#. #". А затем я изменил текст, который будет отображаться в последнем EditText, на новую переменную типа double с одной десятичной дробью (очевидно, изменив ее на String).

DecimalFormat df = new DecimalFormat("#.#");
double BMI_trimmed = Double.parseDouble(df.format(BMI));

final EditText BMIResult = (EditText)findViewById(R.id.BMIResult);
BMIResult.setText(Double.toString(BMI_trimmed));

Здесь я оставляю вам весь код myButtonListenerMethod :

public void myButtonListenerMethod(){
    button = (Button)findViewById(R.id.button);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final EditText heighText = (EditText)findViewById(R.id.heightInput);
            String heighStr = heighText.getText().toString();
            double height = Double.parseDouble(heighStr);

            final EditText weighText = (EditText)findViewById(R.id.weightInput);
            String weighStr = weighText.getText().toString();
            double weight = Double.parseDouble(weighStr);

            double BMI = (weight)/(height*height);

            DecimalFormat df = new DecimalFormat("#.#");
            double BMI_trimmed = Double.parseDouble(df.format(BMI));

            final EditText BMIResult = (EditText)findViewById(R.id.BMIResult);
            BMIResult.setText(Double.toString(BMI_trimmed));
        }
    });
}

Это приложение отлично работает на AVD, я уже запускал его в трех. Но когда я запускаю его на реальном устройстве и нажимаю кнопку, которая запускает myButtonListenerMethod, он внезапно перестает работать и выключается. Терминал выдает следующее сообщение об ошибке:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.bmicalculator, PID: 19058
    java.lang.NumberFormatException: For input string: "24,2"
        at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1306)

Если кто-нибудь знает, в чем проблема, скажите, пожалуйста, я попробую. Честно говоря, я не понимаю, почему он работает в AVD, но не работает в реальном устройстве. Есть идеи?

Ответы [ 3 ]

1 голос
/ 12 апреля 2020

Вы уже получите значение, округленное как хотите и в виде строки из средства форматирования. Не пытайтесь разобрать его, просто отобразите его.

BMIResult.setText(df.format(BMI));
0 голосов
/ 12 апреля 2020

Проблема, вероятно, в вашем телефоне. Некоторые телефоны используют. в качестве разделителя, а некоторые используют, как разделитель. Попробуйте заменить все "," на "." перед разбором из String в Double.

Также попробуйте использовать этот ответ: { ссылка }

0 голосов
/ 12 апреля 2020
double BMI_trimmed = Double.parseDouble(df.format(BMI));
String yourResult = String.valueOf(BMI_trimmed);  

Счастливое кодирование

...