Четыре вопроса - Приложение калькулятора - Android Java

1

Привет всем, я полный новичок, разрабатывающий приложение для Android, я читал "Sams Teach Yourself Java за 24 часа", и это отличная книга. Но я немного застрял, когда получаю значение десятичного числа только editTexts и использую java maths для определения моего конечного значения.

  • Есть ли способ иметь вход editText прямо к переменной float или double, а не к строке, а затем от строки до double?
  • Существуют ли какие-либо реальные проблемы при конвертации между строкой и двойным или float или значения остаются неизменными и не загрязняются.
  • Различия/плюсы и минусы использования doble в отличие от float.
  • Лучший способ ввода значения фракции у пользователя?

Спасибо за любую помощь. Удачного дня.

Теги:
math
variables

3 ответа

2
Лучший ответ
  • Нет. Вы можете написать свой собственный подкласс, который заставляет задуматься, что это то, что происходит, но в какой-то момент в цепочке вам нужно сделать преобразование из символьных/текстовых данных в числовые данные.

  • Да. Примитивные типы с плавающей запятой используют IEEE-754 для кодирования десятичных чисел в двоичном формате. Кодировка обеспечивает очень хорошую точность, но не является точной/не может точно представлять множество возможных чисел. Поэтому, если вы анализируете строку с примитивным типом с плавающей запятой, а затем снова возвращаетесь к строке, вы можете получить что-то, что отличается от вашей входной строки.

  • Двойной использует в два раза больше бит для кодирования числа как float и, таким образом, может поддерживать большую степень точности. Однако он не устранит проблемы, обсуждавшиеся в № 2. Если вы хотите удалить эти проблемы, подумайте о том, чтобы использовать что-то вроде BigDecimal для представления ваших чисел вместо примитивных типов, таких как float или double.

  • Прочитайте все это как строку, split() на символе '/', а затем сохраните каждую часть как целое число (или BigInteger). Если вам нужно отобразить его как десятичное число, используйте BigDecimal для выполнения деления.

  • 0
    Спасибо за помощь
4
  • Нет, вы не можете.
  • Да. Если ваша строка, скажем, идентификатор и читается как "0029482", после того, как вы превратите ее в целое число, она будет читать "29482" и, вероятно, будет недействительной. Строки могут быть длиннее, чем удваивать или плавать, и если у вас есть значение типа "0.12345678901234567890123456789" в строке, вы потеряете большую точность, превратив это в двойное.
  • Удвои удваивают количество бит (отсюда и название), и поэтому могут удерживать больше точности.
  • Примите знаменатель и числительные целые числа и сохраните их в пользовательском классе.
  • 0
    Большое спасибо за ваш вклад - очень полезно
1

Я хотел бы добавить, что если вы ищете альтернативу double или float, которая не влечет за собой потерю точности при преобразовании строк и числовой формы, посмотрите на них:

  • Стандартный java.math.BigDecimal класс представляет собой произвольное масштабированное число точности; т.е. произвольное прецизионное целое число, умноженное (масштабированное) на фиксированную целую мощность 10.

  • Пакет Apache dfp содержит реализации плавающих чисел с десятичной запятой.

Тем не менее, я бы сейчас избегал обоих этих тем и реализовал с помощью float или double. (Я полагаю, что ваша настоящая цель - научиться писать Java, а не создавать приложение для лучшего мира в мире).

  • 0
    спасибо огромное за помощь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню