【问题标题】:JDBC: jtds getString() returns doubles in scientific notationJDBC:jtds getString() 以科学计数法返回双精度数
【发布时间】: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()。谢谢。

【问题讨论】:

    标签: java jdbc jtds number-formatting


    【解决方案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() 方法。
    猜你喜欢
    • 2020-07-22
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多