diff --git a/hutool-core/src/main/java/cn/hutool/core/math/Money.java b/hutool-core/src/main/java/cn/hutool/core/math/Money.java index ecefdadac..6a9f6e029 100644 --- a/hutool-core/src/main/java/cn/hutool/core/math/Money.java +++ b/hutool-core/src/main/java/cn/hutool/core/math/Money.java @@ -294,7 +294,7 @@ public class Money implements Serializable, Comparable { */ public void setAmount(BigDecimal amount) { if (amount != null) { - cent = rounding(amount.movePointRight(2), DEFAULT_ROUNDING_MODE); + cent = rounding(amount.movePointRight(currency.getDefaultFractionDigits()), DEFAULT_ROUNDING_MODE); } } diff --git a/hutool-core/src/test/java/cn/hutool/core/math/MoneyTest.java b/hutool-core/src/test/java/cn/hutool/core/math/MoneyTest.java index 03a76aaeb..873d09675 100644 --- a/hutool-core/src/test/java/cn/hutool/core/math/MoneyTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/math/MoneyTest.java @@ -2,6 +2,8 @@ package cn.hutool.core.math; import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; +import java.math.BigDecimal; +import java.util.Currency; public class MoneyTest { @@ -20,4 +22,12 @@ public class MoneyTest { assertEquals(1234.56D, MathUtil.centToYuan(123456), 0); } + + @Test + public void currencyScalingTest() { + Money jpyMoney = new Money(0, Currency.getInstance("JPY")); + jpyMoney.setAmount(BigDecimal.ONE); + assertEquals(1, jpyMoney.getCent()); + } + }