From e6cf8ca490593aa7437aa4b64c2d247e1068ad38 Mon Sep 17 00:00:00 2001 From: Peter Moser Date: Thu, 19 Mar 2026 14:17:04 +0100 Subject: [PATCH 1/3] add comparison and roundingmodes to ScaledBigDecimal --- .../toolbox/type/ScaledBigDecimal.java | 49 ++++++++++++++++++- ...gativeOrZeroScaledBigDecimalValidator.java | 2 +- .../NegativeScaledBigDecimalValidator.java | 2 +- ...sitiveOrZeroScaledBigDecimalValidator.java | 2 +- .../PositiveScaledBigDecimalValidator.java | 2 +- 5 files changed, 51 insertions(+), 6 deletions(-) diff --git a/src/main/java/it/aboutbits/springboot/toolbox/type/ScaledBigDecimal.java b/src/main/java/it/aboutbits/springboot/toolbox/type/ScaledBigDecimal.java index d8d7bde..065857b 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/type/ScaledBigDecimal.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/type/ScaledBigDecimal.java @@ -13,6 +13,7 @@ * It also provides a set of arithmetic operations that return new instances with the appropriate scale and rounding. */ @NullMarked +@SuppressWarnings("unused") public record ScaledBigDecimal( BigDecimal value ) implements CustomType, Comparable { @@ -188,10 +189,18 @@ public BigDecimal toBigDecimal(int scale) { return this.value().setScale(scale, RoundingMode.HALF_UP); } + public BigDecimal toBigDecimal(int scale, RoundingMode roundingMode) { + return this.value().setScale(scale, roundingMode); + } + public ScaledBigDecimal roundToScale(int scale) { return new ScaledBigDecimal(this.value().setScale(scale, RoundingMode.HALF_UP)); } + public ScaledBigDecimal roundToScale(int scale, RoundingMode roundingMode) { + return new ScaledBigDecimal(this.value().setScale(scale, roundingMode)); + } + @Override public String toString() { return this.value().toString(); @@ -203,8 +212,8 @@ public boolean equals(Object o) { return true; } - if (o instanceof ScaledBigDecimal other) { - return this.value().compareTo(other.value()) == 0; + if (o instanceof ScaledBigDecimal(BigDecimal other)) { + return this.value().compareTo(other) == 0; } return false; @@ -261,4 +270,40 @@ public byte byteValue() { public short shortValue() { return (short) intValue(); } + + public boolean isZero() { + return this.value().compareTo(BigDecimal.ZERO) == 0; + } + + public boolean isNegative() { + return this.value().compareTo(BigDecimal.ZERO) < 0; + } + + public boolean isPositive() { + return this.value().compareTo(BigDecimal.ZERO) > 0; + } + + public boolean isPositiveOrZero() { + return this.value().compareTo(BigDecimal.ZERO) >= 0; + } + + public boolean isNegativeOrZero() { + return this.value().compareTo(BigDecimal.ZERO) <= 0; + } + + public boolean isBiggerThan(ScaledBigDecimal other) { + return this.compareTo(other) > 0; + } + + public boolean isEqualOrBiggerThan(ScaledBigDecimal other) { + return this.compareTo(other) >= 0; + } + + public boolean isSmallerThan(ScaledBigDecimal other) { + return this.compareTo(other) < 0; + } + + public boolean isEqualOrSmallerThan(ScaledBigDecimal other) { + return this.compareTo(other) <= 0; + } } diff --git a/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/NegativeOrZeroScaledBigDecimalValidator.java b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/NegativeOrZeroScaledBigDecimalValidator.java index 31ac388..5251d4b 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/NegativeOrZeroScaledBigDecimalValidator.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/NegativeOrZeroScaledBigDecimalValidator.java @@ -12,6 +12,6 @@ public boolean isValid(ScaledBigDecimal value, ConstraintValidatorContext contex return true; } - return value.compareTo(ScaledBigDecimal.ZERO) < 1; + return value.isNegativeOrZero(); } } diff --git a/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/NegativeScaledBigDecimalValidator.java b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/NegativeScaledBigDecimalValidator.java index bdd3229..1f26096 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/NegativeScaledBigDecimalValidator.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/NegativeScaledBigDecimalValidator.java @@ -12,6 +12,6 @@ public boolean isValid(ScaledBigDecimal value, ConstraintValidatorContext contex return true; } - return value.compareTo(ScaledBigDecimal.ZERO) < 0; + return value.isNegative(); } } diff --git a/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/PositiveOrZeroScaledBigDecimalValidator.java b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/PositiveOrZeroScaledBigDecimalValidator.java index b1a0b85..9a55995 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/PositiveOrZeroScaledBigDecimalValidator.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/PositiveOrZeroScaledBigDecimalValidator.java @@ -12,6 +12,6 @@ public boolean isValid(ScaledBigDecimal value, ConstraintValidatorContext contex return true; } - return value.compareTo(ScaledBigDecimal.ZERO) > -1; + return value.isPositiveOrZero(); } } diff --git a/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/PositiveScaledBigDecimalValidator.java b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/PositiveScaledBigDecimalValidator.java index 9202d83..ce65f6f 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/PositiveScaledBigDecimalValidator.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/PositiveScaledBigDecimalValidator.java @@ -12,6 +12,6 @@ public boolean isValid(ScaledBigDecimal value, ConstraintValidatorContext contex return true; } - return value.compareTo(ScaledBigDecimal.ZERO) > 0; + return value.isPositive(); } } From 607137b23fa669591b8e8fa9d70e92677a871683 Mon Sep 17 00:00:00 2001 From: Peter Moser Date: Thu, 19 Mar 2026 14:19:18 +0100 Subject: [PATCH 2/3] add isEqual comparing by value --- .../aboutbits/springboot/toolbox/type/ScaledBigDecimal.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/it/aboutbits/springboot/toolbox/type/ScaledBigDecimal.java b/src/main/java/it/aboutbits/springboot/toolbox/type/ScaledBigDecimal.java index 065857b..0788ea4 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/type/ScaledBigDecimal.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/type/ScaledBigDecimal.java @@ -291,6 +291,10 @@ public boolean isNegativeOrZero() { return this.value().compareTo(BigDecimal.ZERO) <= 0; } + public boolean isEqual(ScaledBigDecimal other) { + return this.compareTo(other) == 0; + } + public boolean isBiggerThan(ScaledBigDecimal other) { return this.compareTo(other) > 0; } From 4ed78e4f61a3d1ca33ff08af263d5f9703e68307 Mon Sep 17 00:00:00 2001 From: Peter Moser Date: Thu, 19 Mar 2026 14:21:27 +0100 Subject: [PATCH 3/3] add valueOf BigDecimal --- .../aboutbits/springboot/toolbox/type/ScaledBigDecimal.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/it/aboutbits/springboot/toolbox/type/ScaledBigDecimal.java b/src/main/java/it/aboutbits/springboot/toolbox/type/ScaledBigDecimal.java index 0788ea4..8738efe 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/type/ScaledBigDecimal.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/type/ScaledBigDecimal.java @@ -113,6 +113,10 @@ public static ScaledBigDecimal valueOf(String value) { return new ScaledBigDecimal(value); } + public static ScaledBigDecimal valueOf(BigDecimal value) { + return new ScaledBigDecimal(value); + } + public ScaledBigDecimal add(ScaledBigDecimal other) { return new ScaledBigDecimal(this.value().add(other.value())); }