LlewynDav 2023-09-11 10:21 采纳率: 82.4%
浏览 29
已结题

pg数据库numeric类型数据如何判定值为零


                    Object acStrayCurrent = stringObjectMap.get("acStrayCurrent");
                    Object dcStrayCurrent = stringObjectMap.get("dcStrayCurrent");
                    if ((acStrayCurrent != null && !acStrayCurrent.equals(BigDecimal.ZERO))
                            || (dcStrayCurrent != null && !dcStrayCurrent.equals(BigDecimal.ZERO))) {
                        // -------
                    }

为什么上面这段代码不能判定pg数据库中对应的numeric(10,2)的值为0.00的情况?
##现在需要判定当acStrayCurrent 或 dcStrayCurrent 任意一个不等于空且不等于0.00(numeric(10, 2))才能进入if内部该如何判定,目前来看好像acStrayCurrent.equals(BigDecimal.ZERO)不能正确判定0.00

  • 写回答

2条回答 默认 最新

  • 呈两面包夹芝士 2023-09-11 10:36
    关注

    你遇到的问题可能是由于BigDecimal.ZERO实际上是一个BigDecimal对象,而你的stringObjectMap似乎返回一个Object类型。当你从stringObjectMap获取一个Object并尝试将其与BigDecimal.ZERO进行比较时,Java可能无法正确解析这个比较。

    如果你确定stringObjectMap中的值是BigDecimal类型,你可以尝试将获取的对象转换为BigDecimal,然后再与BigDecimal.ZERO进行比较。以下是修改后的代码:

    Object acStrayCurrent = stringObjectMap.get("acStrayCurrent");
    Object dcStrayCurrent = stringObjectMap.get("dcStrayCurrent");
    
    if (acStrayCurrent != null && acStrayCurrent instanceof BigDecimal && !((BigDecimal) acStrayCurrent).equals(BigDecimal.ZERO)) {
        // -------
    }
    if (dcStrayCurrent != null && dcStrayCurrent instanceof BigDecimal && !((BigDecimal) dcStrayCurrent).equals(BigDecimal.ZERO)) {
        // -------
    }
    

    上述代码首先检查获取的对象是否为null,然后检查它是否是BigDecimal的实例,然后再将其转换为BigDecimal并与ZERO进行比较。如果任何一个条件为真,则执行相应的操作。

    这样修改之后,应该可以解决你的问题。如果仍然存在问题,可能需要进一步检查你的数据库和映射代码,以确保数据的类型和你在Java代码中使用的类型相匹配。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月13日
  • 已采纳回答 8月5日
  • 创建了问题 9月11日