Как получить «самый короткий» BigDecimal, который однозначно определяет данный дубль - PullRequest
7 голосов
/ 19 мая 2011

По сути, мне любопытно, как получить new BigDecimal(Double.toString(d)), не проходя процесс создания строки.

Документация для Double.toString довольно сложна (и интересна). Насколько я понимаю, метод на самом деле не возвращает строковое представление числа, фактически представленного данным двойным числом, но строковое представление (ближайшего) кратчайшего действительного числа, которое однозначно идентифицирует данный двойной .

(мне на самом деле не нужно этого. Если бы я это сделал, я бы в любом случае прошел бы строку. Мне просто любопытно, как этот алгоритм находит это "короткое" действительное число, которое уникально определяет данное двойное значение.)

(Это дополнительный вопрос по к этому вопросу .)

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

См .: Как точно печатать числа с плавающей запятой и Как правильно читать числа с плавающей запятой

реализации: здесь и здесь

Существует новая публикация на эту тему, которая может представлять интерес для тех, кто ищет решения.Он (Grisu2) работает без бинумов, если вы готовы согласиться на самую короткую строку в 99,8% случаев, и точную, но не самую короткую строку в остальных случаях.

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

Возможно, вы думаете о BigDecimal.valueOf(double), который делает это.

...