Skip to content

BIGDECIMAL_DIVIDE_WITHOUT_ROUNDING

Summary

  • Rule ID: BIGDECIMAL_DIVIDE_WITHOUT_ROUNDING
  • Name: BigDecimal divide without rounding
  • Problem: BigDecimal.divide(BigDecimal) can throw at runtime for non-terminating decimal expansions.

What This Rule Reports

This rule reports direct calls to: - java/math/BigDecimal.divide(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;

Examples (reported)

package com.example;
import java.math.BigDecimal;
public class ClassA {
    public BigDecimal methodX(BigDecimal varOne, BigDecimal varTwo) {
        return varOne.divide(varTwo);
    }
}

What This Rule Does Not Report

  • Overloads that specify rounding or context (for example RoundingMode, MathContext).
  • Kotlin BigDecimal operator division (a / b), which is compiled with an explicit rounding mode.
  • Calls that appear only in classpath/dependency classes outside the analysis target.

Examples (not reported)

package com.example;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class ClassB {
    public BigDecimal methodY(BigDecimal varOne, BigDecimal varTwo) {
        return varOne.divide(varTwo, RoundingMode.HALF_UP);
    }
}
package com.example

import java.math.BigDecimal

fun methodKotlinSafe(varOne: BigDecimal, varTwo: BigDecimal): BigDecimal {
    return varOne / varTwo
}

Use an overload that specifies RoundingMode or MathContext to make division behavior explicit.

Message Shape

Findings are reported as Avoid BigDecimal.divide(...) without rounding in <class>.<method><descriptor>; specify RoundingMode or MathContext.