在我手头的应用程序中,我必须使用 REST/JSON API,该 API 期望给定最大范围的货币值;例如。;通过此 Web API 交换的所有货币值最多必须有四位小数位。
为了实现该 API,我使用 Kotlin 数据类,在其中使用 JSR-354 MonetaryAmount API 的
Money
实现来表示货币值。是否可以自定义货币类型以仅接受特定的最大规模,否则会失败?
也就是说,当从数字或字符串创建货币值时,例如
Money.of(200.20234, "EUR")
,当输入的小数位数超过允许的小数位数时,我希望此构造失败。同样,如果算术运算产生的小数位数多于规定的位数,我希望算术运算失败。我既不需要隐式舍入,也不需要自动扩展(更多的小数位)。有没有办法配置 MonetaryContext
或底层 MathContext
来实现此目的?
我知道没有内置的实用方法/类可以做到这一点。 当输入作为字符串时,我只需使用正则表达式来验证它。
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" }
}