--- old/src/java.base/share/classes/java/math/BigDecimal.java 2019-11-06 07:47:27.189001000 -0800 +++ new/src/java.base/share/classes/java/math/BigDecimal.java 2019-11-06 07:47:26.929001000 -0800 @@ -2204,6 +2204,29 @@ } } else { result = approx.scaleByPowerOfTen(-scaleAdjust/2).round(mc); + + switch (targetRm) { + case DOWN: + case FLOOR: + // Check if too big + if (result.multiply(result).compareTo(this) > 0 ) { + result = result.subtract(result.ulp()); + } + break; + + case UP: + case CEILING: + // Check if too small + if (result.multiply(result).compareTo(this) < 0 ) { + result = result.add(result.ulp()); + } + break; + + default: + // Do nothing for half-way cases + break; + } + } if (result.scale() != preferredScale) {