Java double избегает научной нотации, но сохраняет тип данных

#java #java-8 #double #scientific-notation

#java #java-8 #double #научная нотация

Вопрос:

Как я могу изменить научную нотацию double в Java, но сохранить тип данных? Я знаю о DecimalFormat и я не хочу выводить значение для вывода. Я хочу передать его по конвейеру как double, а не в научной нотации. Например, я хочу 2000000000000 как double, а не в форме 2.0E12 . Каждое решение, которое я нашел до сих пор, преобразует его либо в длинную, либо в большую десятичную дробь, либо в строку. Возможно ли сохранить его как double?

Комментарии:

1. Что вы подразумеваете под » передачей его по конвейеру «? Пока стоимость «проживания» в Java bitpattern будет стиль такой же( 1000.0 такая же, как 10e2 же, как 1e3 же, как 1000e0 ). Научная нотация — это всего лишь формат (де) сериализации.

2. @Turing85 В конце конвейера он отправляется на HTML-страницу и отображается как научная нотация. У меня нет доступа к этой части конвейера, поэтому я не могу его там изменить. Я хочу изменить его, когда он будет сгенерирован вместо этого.

3. Тогда вы не сможете сохранить его как double . Сторона, которая десериализует значение, определяет формат.

4. Нет. Битовый шаблон double остается неизменным. Процесс десериализации double (т.Е. преобразование double в String ) изменяет его.

5. Итак, вы пытаетесь решить проблему, за которую не несете ответственности. Тот, кто преобразует double в строку HTML, отвечает за формат вывода.

Ответ №1:

double не кодирует никакой информации о форматировании, только значение. Форматированием по умолчанию управляет Double.toString или код, который вставляет значения в HTML-страницу, может использовать средство форматирования.

Один из вариантов — заменить ваш double класс-оболочку экземпляром, который содержит double поле, но имеет метод toString, который выполняет то, что вы хотите. Чтобы выполнить арифметические действия, обратитесь к double полю. Конвейер HTML-страницы, обнаружив ссылочную переменную, которая не является одним из стандартных классов, скорее всего, вызовет ее toString для форматирования значения.

Комментарии:

1. Если вы можете передать произвольный объект в конвейер HMTL, например, предлагаемую оболочку, вы также можете передать ему форматированную строку.