JDBC:jtds getString() 以科学计数法返回双精度数

Posted

技术标签:

【中文标题】JDBC:jtds getString() 以科学计数法返回双精度数【英文标题】:JDBC: jtds getString() returns doubles in scientific notation 【发布时间】:2012-02-02 14:58:19 【问题描述】:

使用 jtds JDBC 驱动程序时,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()。谢谢。

【问题讨论】:

【参考方案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

【讨论】:

感谢您的努力。问题是如何使所有值的 jtds 格式都以相同的方式加倍。 我猜你不能改变图书馆的行为,你不觉得吗?我相信这是最好的方法。只需定义一个 DecimalFormat 并用它格式化所有双打。 同意,我无法改变这种行为。现在我需要了解为什么数据库列类型decimal(28,2)在jdbc中变成double 您到底期待什么类型的?我的意思是,如果你使用 getDouble 你会得到一个双精度, getString 你会得到一个字符串, getFloat 给出一个浮点数,等等...... 我的意思是,关联 decimal(28,2) -> double 不依赖于 jdbc,而是依赖于您正在使用的 getTYPE() 方法。

以上是关于JDBC:jtds getString() 以科学计数法返回双精度数的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse 无法加载 JDBC Driver 类:net.sourceforge.jtds.jdbc.Driver?

什么相当于Microsoft JDBC中的JTDS属性?

java.lang.ClassNotFoundException:JBuilder 7 中的 net.sourceforge.jtds.jdbc.Driver

ms sql microsoft的jdbc驱动和jTDS的驱动的区别

无法在 Tomcat 中加载 net.sourceforge.jtds.jdbc.Driver

打开跟踪文件时出错:没有这样的文件或目录 | java.lang.ClassNotFoundException:net.sourceforge.jtds.jdbc.Driver