Skip to content

Commit ac6619b

Browse files
committed
Ensure scale >= 0 in conversion results
1 parent a7a13ab commit ac6619b

File tree

3 files changed

+23
-11
lines changed

3 files changed

+23
-11
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Fixed
1111

12-
- `Unit.convert()` and `Unit.getConversionMultiplier(Unit)` now strip any trailing fractional zeros.
12+
- `Unit.convert()` and `Unit.getConversionMultiplier(Unit)` now strip any trailing fractional zeros and the
13+
scale of the result is >= 0.
1314

1415
## [7.0.0] - 2025-07-22
1516

qudtlib-model/src/main/java/io/github/qudtlib/model/Unit.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -401,11 +401,16 @@ public BigDecimal convert(BigDecimal value, Unit toUnit, QuantityKind quantityKi
401401
? BigDecimal.ZERO
402402
: toUnit.getConversionOffset().orElse(BigDecimal.ZERO);
403403
BigDecimal toMultiplier = toUnit.getConversionMultiplier().orElse(BigDecimal.ONE);
404-
return value.add(fromOffset)
405-
.multiply(fromMultiplier, MathContext.DECIMAL128)
406-
.divide(toMultiplier, MathContext.DECIMAL128)
407-
.subtract(toOffset)
408-
.stripTrailingZeros();
404+
BigDecimal result =
405+
value.add(fromOffset)
406+
.multiply(fromMultiplier, MathContext.DECIMAL128)
407+
.divide(toMultiplier, MathContext.DECIMAL128)
408+
.subtract(toOffset)
409+
.stripTrailingZeros();
410+
if (result.scale() < 0) {
411+
result = result.setScale(0);
412+
}
413+
return result;
409414
}
410415

411416
/**
@@ -448,7 +453,11 @@ public BigDecimal getConversionMultiplier(Unit toUnit) {
448453
toUnit.getConversionMultiplier().isEmpty()
449454
? "no multiplier"
450455
: "has multiplier")));
451-
return result.stripTrailingZeros();
456+
result = result.stripTrailingZeros();
457+
if (result.scale() < 0) {
458+
result = result.setScale(0);
459+
}
460+
return result;
452461
}
453462

454463
public boolean conversionOffsetDiffers(Unit other) {

qudtlib-test/src/test/java/io/github/qudtlib/QudtTests.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -569,10 +569,12 @@ public void testMilliSV__PER__HR_to_MicroSV__PER__HR() {
569569
u.getIriLocalname(),
570570
u.getConversionMultiplier().get().toString())));
571571
*/
572-
MatcherAssert.assertThat(
573-
Qudt.convert(
574-
new BigDecimal("15.12"), Units.MilliSV__PER__HR, Units.MicroSV__PER__HR),
575-
Matchers.comparesEqualTo(new BigDecimal(15120)));
572+
BigDecimal converted = Qudt.convert(
573+
new BigDecimal("15.12"), Units.MilliSV__PER__HR, Units.MicroSV__PER__HR);
574+
MatcherAssert.assertThat(converted,Matchers.comparesEqualTo(new BigDecimal(15120)));
575+
BigDecimal expected = new BigDecimal(15120);
576+
assertEquals(expected, converted) ;
577+
576578
}
577579

578580
@Test

0 commit comments

Comments
 (0)