From 20f81b974a64faf5b8bd12ffe2ac7ed92a11b074 Mon Sep 17 00:00:00 2001 From: voidstar Date: Thu, 19 Mar 2026 14:24:25 +0100 Subject: [PATCH] Add scaled big decimal features (#56) * add comparison and roundingmodes to ScaledBigDecimal * add isEqual comparing by value * add valueOf BigDecimal --- .../toolbox/type/ScaledBigDecimal.java | 57 ++++++++++++++++++- ...gativeOrZeroScaledBigDecimalValidator.java | 2 +- .../NegativeScaledBigDecimalValidator.java | 2 +- ...sitiveOrZeroScaledBigDecimalValidator.java | 2 +- .../PositiveScaledBigDecimalValidator.java | 2 +- 5 files changed, 59 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..8738efe 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 { @@ -112,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())); } @@ -188,10 +193,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 +216,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 +274,44 @@ 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 isEqual(ScaledBigDecimal other) { + return this.compareTo(other) == 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/scaled_big_decimal/NegativeOrZeroScaledBigDecimalValidator.java b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/scaled_big_decimal/NegativeOrZeroScaledBigDecimalValidator.java index 1bc95b2..9f6a13e 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/scaled_big_decimal/NegativeOrZeroScaledBigDecimalValidator.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/scaled_big_decimal/NegativeOrZeroScaledBigDecimalValidator.java @@ -15,6 +15,6 @@ public boolean isValid(@Nullable ScaledBigDecimal value, ConstraintValidatorCont return true; } - return value.compareTo(ScaledBigDecimal.ZERO) < 1; + return value.isNegativeOrZero(); } } diff --git a/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/scaled_big_decimal/NegativeScaledBigDecimalValidator.java b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/scaled_big_decimal/NegativeScaledBigDecimalValidator.java index 0eccaeb..0f799c2 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/scaled_big_decimal/NegativeScaledBigDecimalValidator.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/scaled_big_decimal/NegativeScaledBigDecimalValidator.java @@ -15,6 +15,6 @@ public boolean isValid(@Nullable ScaledBigDecimal value, ConstraintValidatorCont return true; } - return value.compareTo(ScaledBigDecimal.ZERO) < 0; + return value.isNegative(); } } diff --git a/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/scaled_big_decimal/PositiveOrZeroScaledBigDecimalValidator.java b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/scaled_big_decimal/PositiveOrZeroScaledBigDecimalValidator.java index 8918867..51f8667 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/scaled_big_decimal/PositiveOrZeroScaledBigDecimalValidator.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/scaled_big_decimal/PositiveOrZeroScaledBigDecimalValidator.java @@ -15,6 +15,6 @@ public boolean isValid(@Nullable ScaledBigDecimal value, ConstraintValidatorCont return true; } - return value.compareTo(ScaledBigDecimal.ZERO) > -1; + return value.isPositiveOrZero(); } } diff --git a/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/scaled_big_decimal/PositiveScaledBigDecimalValidator.java b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/scaled_big_decimal/PositiveScaledBigDecimalValidator.java index 2371386..6cc1357 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/scaled_big_decimal/PositiveScaledBigDecimalValidator.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/validation/validator/scaled_big_decimal/PositiveScaledBigDecimalValidator.java @@ -15,6 +15,6 @@ public boolean isValid(@Nullable ScaledBigDecimal value, ConstraintValidatorCont return true; } - return value.compareTo(ScaledBigDecimal.ZERO) > 0; + return value.isPositive(); } }