Четыре вопроса - Приложение калькулятора - Android Java - PullRequest
1 голос
/ 24 мая 2011

Привет всем, я новичок в разработке приложения для Android, я читал «Сэмс научи себя Java за 24 часа», и это отличная книга.Но я застрял немного, где я получаю значение десятичного числа только editTexts и использую Java-математику, чтобы определить мое конечное значение.

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

Спасибоза любую помощь.Хорошего дня.

Ответы [ 3 ]

4 голосов
/ 24 мая 2011
  1. Нет, вы не можете.
  2. Да.Если ваша строка, скажем, является идентификатором и читается как «0029482», после того, как вы превратите ее в целое число, она будет читать «29482» и, вероятно, будет недействительной.Строки могут быть длиннее, чем double или float, и если у вас есть значение типа «0.12345678901234567890123456789», вы потеряете большую точность, преобразовав это значение в double.(отсюда и название) и, следовательно, может содержать большую точность.
  3. Примите целые числа знаменателя и числителя и сохраните их в пользовательском классе.
2 голосов
/ 24 мая 2011
  1. Нет. Вы можете написать свой собственный подкласс, который будет выглядеть так, как будто это то, что происходит, но в какой-то момент в цепочке вам необходимо выполнить преобразование символьных / текстовых данных в числовые.

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

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

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

1 голос
/ 24 мая 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...