java Kotlin有BigDecimal setPrecision实用程序方法吗?
我在某个地方读到,Java的决策委员会认为setPrecision
上的BigDecimal
方法是愚蠢的,因为它已经setScale
更愚蠢的是,API用户的代码中有这样的方法:
private fun getBigDecimalWith16DigitPrecision(value: BigDecimal): BigDecimal {
return when {
value < BigDecimal.ONE -> value.setScale(16, RoundingMode.HALF_UP)
value < BigDecimal(10) -> value.setScale(15, RoundingMode.HALF_UP)
value < BigDecimal(100) -> value.setScale(14, RoundingMode.HALF_UP)
value < BigDecimal(1000) -> value.setScale(13, RoundingMode.HALF_UP)
value < BigDecimal(10000) -> value.setScale(12, RoundingMode.HALF_UP)
else -> value.setScale(11, RoundingMode.HALF_UP)
}
}
这甚至不包括所有的案例
# 1 楼答案
如果您想要的只是一个更简单(更简洁)的代码版本,那么您可以通过计算比例(
16 - log10(value)
,或11
,以较大者为准)来简化代码:# 2 楼答案
这只是一条线,因为你的刻度需要和精度一样变化:
或者(更明显,但效率更低):