Android TextView отображает строку с тремя десятичными разрядами посредством двойного преобразования из другого класса - PullRequest
0 голосов
/ 19 октября 2018

Я не могу ограничить TextView, чтобы показывать только 3 десятичных знака, когда я использую переменную из другого класса.Вот проблема:

У меня есть этот TextView

        public static TextView pt_resultado;

Однако, когда я пытался использовать его, чтобы показать число, введенное с другого экрана при преобразовании из Double, ограничив десятичные дроби:

pt_resultado.setText(String.format("%.3f",(Double.toString(ActivityPopulacao.pt_resultado2))));

Я получаю следующую ошибку:

 java.util.IllegalFormatConversionException: %f can't format java.lang.String arguments

Есть ли способ показать только три знака после запятой без изменения преобразования?

Ответы [ 4 ]

0 голосов
/ 19 октября 2018

Определение TextView как статического представления приведет к утечкам памяти.В дальнейшем вы можете передавать значение из одного действия в другое, используя Intent - я предполагаю, что вы используете действие.Кроме того, getText().toString() уже преобразовал входное значение в строку.Так что тебе больше не нужно Double.toString().Скопируйте приведенный ниже код и вставьте его в код, отвечающий за запуск нового действия.

Intent in = new Intent(ActivityPopulacao.this, NewActivity.class);
in.putExtra("key", pt_resultado2.getText().toString());
startActivity(in);

Чтобы получить значение, получите намерение и запросите строку в методе NewActivity onCreate().

String newDouble = getIntent().getStringExtra("key");
pt_resultado.setText(newString);

Обратите внимание, что NewActivity в приведенном выше фрагменте относится к операции, для которой необходимо значение.

0 голосов
/ 19 октября 2018

Почему вы конвертируете в строку и пытаетесь отформатировать ее как Double?Метод format() предполагает форматирование числа.Поскольку ActivityPopulacao.pt_resultado2 равно Double, вы должны отформатировать двойное значение:

pt_resultado.setText(String.format("%.3f", ActivityPopulacao.pt_resultado2));
0 голосов
/ 19 октября 2018

Чтобы помочь вам также понять, почему это происходит, я немного ломаю поток.

double recievedNum = ActivityPopulacao.pt_resultado2;
String convertedNumAsString = String.format ("%.3f", recievedNum);

pt_resultado.setText(convertedNumAsString);

Вы видите ошибку?Вы используете Double.toString (число), где ожидается число.String.format принимает двойное форматирование и преобразует его в строку.

0 голосов
/ 19 октября 2018

Вы пытаетесь вставить строку как float.Вы должны сделать:

pt_resultado.setText(String.format("%.3f",Double.valueOf(ActivityPopulacao.pt_resultado2.getText().toString())))

Вам необходимо:

  1. Получить строку из TextView.
  2. Преобразовать строку в двойное число / число с плавающей запятой.
  3. Форматировать значение двойного числа / числа с плавающей запятой как строку в 3 десятичных разрядах.

Я предположил, что ActivityPopulacao.pt_resultado2 также является TextView!

...