【问题标题】:How do I fix this preparedStatement error when returning a decimal value?返回十进制值时如何解决此preparedStatement 错误?
【发布时间】:2013-07-16 00:58:03
【问题描述】:

所以我基本上是从数据库中返回一个 int 值作为字符串(不要问为什么)。现在,我必须将它与我已有的一些值进行比较,但是,这些值似乎存在差异。

我的价值:204.4 数据库返回值:204.40

有什么办法可以去掉多余的零?

我的阅读代码是:

            if(resultSet.getString(i) != null) {
                rowOfData.add(resultSet.getString(i).trim());
            } else {
                rowOfData.add("");
            }  

为了比较是:

    for (int i = 0; i < inputRow.size(); i++) { 
        if(!tableRowData.contains(inputRow.get(i))) {
            return false;
        }
    }
    return true;

【问题讨论】:

    标签: java mysql string type-conversion decimal


    【解决方案1】:

    把它当作一个合适的数字怎么样?

    String.valueOf(resultSet.getDouble(i))
    

    如果返回值作为一个字符串,那么尾随的“0”永远不会有机会在数字上下文中被处理并“脱落”。

    当将 视为 一个数字时,尾随的 0 是微不足道的并且“脱落”:

    204.40 == 204.4        // -> true
    String.valueOf(204.40) // -> "204.4"
    

    当然,使用数字而不是将其[返回]为字符串可能更合适..

    【讨论】:

    • 谢谢!我完全不可能想到这一点......多么巧妙。
    • (如果您要投反对票 - 这完全没问题 - 请解释原因,以便我可以学习、更正/注释我的答案,并防止传播不正确的信息!)
    • 嗯,你很清楚我真的不能这样做,对吧?否则我不会有这个问题!不过还是感谢您的帮助。
    • @gran_profaci 当然可以。同样的原则也适用——即使 RS 返回 getDouble 会阻塞的东西。虽然我敦促修复 RS,但还有其他方法可以修复字符串并将其转换为双精度(或其他更合适的数字)。无论如何,希望你能解决你的问题!
    猜你喜欢
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 2019-08-17
    • 2021-05-04
    • 1970-01-01
    • 2020-07-07
    相关资源
    最近更新 更多