JDBC: jtds getString() возвращает двойное число в экспоненциальном представлении

При использовании драйвера JDBC jtds getString иногда возвращает двойные числа, отформатированные в научном представлении:

// metaData.getColumnType(0) == java.sql.Types.DOUBLE
String.format("%f", resultSet.getDouble(0)); // = 26150279.910000
resultSet.getString(0);  // = 2.615027991E7

для некоторых значений это не так:

String.format("%f", resultSet.getDouble(0)); // = 624000.000000
resultSet.getString(0);  // = 624000.0

Можно ли заставить getString всегда возвращать двойные числа в формате %f?

Пожалуйста, не уговаривайте меня использовать getDouble(). Спасибо.


person khachik    schedule 02.02.2012    source источник


Ответы (1)


Извлеките двойной с помощью getDouble:

double num = resultSet.getDouble();

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

DecimalFormat df = new DecimalFormat(pattern);

Получить отформатированную строку

String formattedString = df.format(num);

И наслаждайтесь собственной строкой :)

если вам нужна помощь в построении шаблона, обратитесь к документации:

http://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html

person STT LCU    schedule 02.02.2012
comment
Спасибо за старания. Вопрос заключался в том, как сделать форматирование jtds двойным одинаково для всех значений. - person khachik; 02.02.2012
comment
я думаю, вы не можете изменить поведение библиотеки, не так ли? я уверен, что это лучший способ. Просто определите один DecimalFormat и отформатируйте все свои двойники с ним. - person STT LCU; 03.02.2012
comment
Согласен, я не могу изменить поведение. Теперь мне нужно понять, почему тип столбца базы данных decimal(28,2) становится double в jdbc. - person khachik; 03.02.2012
comment
какой тип вы ожидаете именно? я имею в виду, что если вы используете getDouble, вы получите двойное значение, getString — строку, getFloat — число с плавающей запятой и так далее... - person STT LCU; 03.02.2012
comment
Я имею в виду, что ассоциация decimal(28,2) -> double не зависит от jdbc, а от используемого вами метода getTYPE(). - person STT LCU; 03.02.2012