Конвертируйте double в String в Java и наоборот, не теряя точности - PullRequest
2 голосов
/ 16 апреля 2009

A String представление double записывается и читается из файла приложением C # .

Приложение C # преобразует double в строку, используя следующий фрагмент:

value.ToString("R", NumberFormatInfo.InvariantInfo);

Приложение C # преобразует строку в двойное число, используя следующий фрагмент

double num = double.Parse(s, NumberStyles.Float, (IFormatProvider) NumberFormatInfo.InvariantInfo);

Если бы этот же файл был записан и прочитан приложением Java , как бы вы конвертировали типы без потери данных?

Ответы [ 5 ]

13 голосов
/ 16 апреля 2009

Просто использование Double.parseDouble() и Double.toString() должно работать без потери данных, я считаю. В частности, из документов на Double.toString():

Сколько цифр должно быть напечатано для дробная часть м или а? Там должна быть хотя бы одна цифра представляют дробную часть, и кроме того, как много, но только столько, больше цифр, необходимых для однозначного отличить значение аргумента от смежные значения типа double. Тот есть, предположим, что х является точным математическое значение, представленное десятичное представление производится этот метод для конечного ненулевого аргумент d. Тогда d должно быть двойным значение, ближайшее к х; или если два двойных значения одинаково близки к х, то д должен быть одним из них и наименее значительная часть значимости d должно быть 0.

Другая альтернатива, если вы хотите сохранить точное строковое представление (что не совсем то же самое), это использовать BigDecimal в Java.

6 голосов
/ 16 апреля 2009

Двойные числа имеют ограниченную точность и могут не сохранить строку в целости. Класс BigDecimal имеет произвольную точность и сохраняет представление sring.

Чтобы преобразовать строку в BigDecimal:

BigDecimal d = new BigDecimal("10.1234567890");

Чтобы преобразовать BigDecimal в строку:

System.out.println(d.toString());

Подробнее здесь: http://epramono.blogspot.com/2005/01/double-vs-bigdecimal.html

4 голосов
/ 16 апреля 2009

Требуется ли строковое представление для каких-либо целей или оно просто для передачи текстовых данных (например, сообщение SOAP / REST)?

Для последнего вы можете преобразовать двойное значение в длинное, используя java.lang.Double.doubleToRawLongBits(double value), и обратно в двойное, используя java.lang.Double.longBitsToDouble(long value). Вы можете транспортировать длинное значение в виде шестнадцатеричной строки.

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Double.html#doubleToRawLongBits(double) http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Double.html#longBitsToDouble(long)

Это сохранит точное 64-битное двойное значение, которое у вас есть, но оно не будет читаемым человеком (для большинства!;)).

0 голосов
/ 16 апреля 2009

От двойного до строкового:

String stringValue = Double.toString(value);

От строки к удвоению

double doubleValue = Double.valueOf(value);
0 голосов
/ 16 апреля 2009

Просто вы должны использовать Java-класс-оболочку с заглавной буквой "D" "Двойной"

int String s = Double.toString (yourDoubleVariable);

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