Разделение Java для двойного и плавающего без E - PullRequest
0 голосов
/ 29 января 2012

Я делаю несколько больших чисел (long / long, чтобы удвоить, и int / int, чтобы плавать). Но я сталкиваюсь с проблемой, когда результаты включают "E". Я знаю, что мы можем использовать NumberFormat для форматирования при отображении, но это не то, что я. Просто хочу, чтобы результат делений не включал «E», то есть просто округлил его до ближайшего числа с плавающей запятой / double, которое помещается в пространстве.

У кого-нибудь есть идея?

Ответы [ 2 ]

6 голосов
/ 29 января 2012

Внутреннее представление числа с плавающей запятой не имеет переключателя для присутствия E или нет (проверьте IEEE-754).Таким образом, ваше число с плавающей запятой / двойное число - это просто число (не число с E или без него).

Единственное место, где вы получаете E, это когда вы распечатываете это значение.И хотя Java использует числовой формат для печати, я не вижу смысла, почему вы не хотите использовать его здесь.

System.out.println(new DecimalFormat("#.#####").format(doubleValue)); 
0 голосов
/ 29 января 2012

Общая проблема, которая удваивается и плавающая в двоичном формате.Не всегда возможно преобразовать десятичную дробь в двоичную дробь.Например, дробная дробь 0,2 имеет бесконечно много цифр в двоичном (двойном) формате.Таким образом, при преобразовании из бинарного формата в десятичную строку получается что-то вроде «0.2000000001», что отображается с помощью E. Для решения этой проблемы вы можете использовать класс BigDecimal, содержащий число в десятичном формате, так что нет проблем с E - его можно легко округлить до любого десятичногоуказать методом setScale.Или вы можете получить двойное значение как есть, записать его на выход с помощью String.format («Мое значение:% .3f», значение) - я рекомендую этот способ.

Если вы просто хотите округлить значение додесятичную точку, которую вы можете использовать:

new BigDecimal(val).setScale(3, RoundingMode.HALF_EVEN).doubleValue()

Но нет никакой гарантии, что это ядро ​​вернет удвоение с точными дробными числами.

...