Как избежать хранения значений Double в формате 1Ex?
У меня двойная переменная:
private double b=0.0;
Я беру значение определенного поля в b (значение от 0.0 до 9.99999999). В основном, пользователь вводит значение от 0,0 до 1,0.
Когда я сохраняю значение от пользователя в 'b', и если значение равно 0,000001, оно сохраняется как 1E-6, и в следующий раз отображается как то же самое на экране (это потому, что b равно Double).
Есть ли способ (просто путем вызова какого-либо метода) в Java, чтобы я мог избежать преобразования значения в формат 1E-6? Я хочу сохранить значение, введенное только пользователем (0.000001).
2 ответа
Двойник на самом деле не "сохраняется" как строка вообще. Это просто вопрос форматирования - для которого вы должны увидеть DecimalFormat
, Тем не менее, это точно не будет точно 0,000001, потому что это число не может быть точно представлено как двойное число. Я настоятельно рекомендую вам использовать BigDecimal
вместо этого, когда точные десятичные значения имеют значение (как это звучит, как они делают здесь).
Это правда, что число не хранится в памяти, используя научную (E) запись.
Вы можете продемонстрировать это себе, по-разному форматируя число при выводе:
@Test
public void testLittle() {
double myNum = 0.000001;
System.out.printf("%f \n",myNum);
}
Вам определенно следует прислушаться к другим советам, опубликованным здесь в ответах, и использовать BigDecimal, если вы действительно хотите, чтобы выходные данные соответствовали входным, поскольку некоторые значения с плавающей запятой не соответствуют вашим представлениям при представлении их в компьютере. (ссылка: IEEE-754)
Презентации "Java Puzzlers" иногда обсуждают это странное поведение и всегда являются интересным способом изучения. (См. Этот доклад из Google I / O 2011, через 3 минуты)