【问题标题】:Required type Integer provided BigDecimal Java compareTo()所需类型 整数 提供 BigDecimal Java compareTo()
【发布时间】:2022-01-10 17:24:13
【问题描述】:

Code Error

在以下方法中,我尝试使用 compareTo() 来比较 getErclasCurrErWtPerValNo() 是 Integer 和 getErclasHrWorkEligNo() 是 BigDecimal。我没有任何运气铸造或使用 intValue()。如何解决?

public Integer getErclasCurrErWtPerValNo() {
        return this.erclasCurrErWtPerValNo;
    }

public BigDecimal getErclasHrWorkEligNo() {
        return this.erclasHrWorkEligNo;
    }


if (StringUtils.isEmpty(erpp.getEbErClasses().getErclasHrWorkEligNo())) {
    errors.rejectValue(fieldPrefix + "ebErClasses.erclasHrWorkEligNo", getSectionName(),
            "Minimum Working Hours Per Week is required.");
} else if (erpp.getEbErClasses().getErclasCurrErWtPerValNo().compareTo(erpp.getEbErClasses().getErclasHrWorkEligNo())){
    errors.rejectValue(fieldPrefix + "ebErClasses.erclasHrWorkEligNo", getSectionName(),
            "Hours can not be below " + erpp.getEbErClasses().getErclasHrWorkEligNo().intValue() + ".");
}

【问题讨论】:

  • 您的类可能被错误地声明为 Comparable。您需要显示getErclasCurrErWtPerValNo 返回的值的类定义。您显示的代码还不够
  • @Michael 谢谢迈克尔,我现在添加这些
  • 哦,对了。我现在明白了。可能更好地反转比较。 Integer 只能与 Integer 进行比较,但您不能将 BigDecimal 转换为 Integer 而不会丢失小数部分。 erpp.getEbErClasses().getErclasHrWorkEligNo().compareTo(new BigDecimal(erpp.getEbErClasses().getErclasCurrErWtPerValNo()))
  • @Michael 现在它说必需的类型 boolean 提供的 int
  • 查看该方法的文档。 docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html 它返回一个三态。小于、等于或大于。您将它放在 if 中,它需要以下两种状态之一:真或假。如果要查看是否相同,请在其后添加== 0

标签: java integer bigdecimal compareto


【解决方案1】:

BigDecimal 作为 intValue() 方法,“将此 BigDecimal 转换为 int”。 https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html

这会起作用:

erpp.getEbErClasses().getErclasCurrErWtPerValNo().compareTo(erpp.getEbErClasses().getErclasHrWorkEligNo.intValue() == 0

我会添加一个空检查

【讨论】:

  • 如果我的 BigDecimal 的值为 3.5,我调用 intValue(),我将得到整数 3。如果我将它与另一个整数 3 进行比较,它会显示为 3.5 == 3。你应该不要在此处使用intValue,因为您正在丢弃小数点。你有效地四舍五入。解决这个问题的正确方法是将 Integer 转换为 BigDecimal,而不是相反。
猜你喜欢
  • 2011-10-10
  • 2019-03-22
  • 1970-01-01
  • 2021-06-03
  • 2020-08-24
  • 2019-05-01
  • 1970-01-01
  • 2020-10-18
  • 2021-03-13
相关资源
最近更新 更多