固定比例的货币金额

问题描述 投票:0回答:1

在我手头的应用程序中,我必须使用 REST/JSON API,该 API 期望给定最大范围的货币值;例如。;通过此 Web API 交换的所有货币值最多必须有四位小数位。

为了实现该 API,我使用 Kotlin 数据类,在其中使用 JSR-354 MonetaryAmount API 的

Money
实现来表示货币值。是否可以自定义货币类型以仅接受特定的最大规模,否则会失败?

也就是说,当从数字或字符串创建货币值时,例如

Money.of(200.20234, "EUR")
,当输入的小数位数超过允许的小数位数时,我希望此构造失败。同样,如果算术运算产生的小数位数多于规定的位数,我希望算术运算失败。我既不需要隐式舍入,也不需要自动扩展(更多的小数位)。有没有办法配置
MonetaryContext
或底层
MathContext
来实现此目的?

java currency java-money mathcontext
1个回答
0
投票

我知道没有内置的实用方法/类可以做到这一点。 当输入作为字符串时,我只需使用正则表达式来验证它。

object VerifyDecimals {
    private val VALID_MONEY_FORMAT = Pattern.compile("\\d+\\.\\d{2}")
    fun verify(input: String?) = require(VALID_MONEY_FORMAT.matcher(input).matches()) { "$input had an invalid format" }
}
© www.soinside.com 2019 - 2024. All rights reserved.