小编Naw*_*sta的帖子

为什么bigDecimal的scale()方法与stripTrailingZeros()方法结合时返回负值?

为了避免出现像 10.0000 这样的值BigDecimal,我使用了stripTrailingZeros()返回值 10 而不是预期的 10.0000 的方法。现在,10 的小数位数应该为 0,因为对于零或正值,小数位数是小数点右侧的位数。然而,情况并非如此,因为它返回 -1。

Log.d("click", BigDecimal("10").toPlainString()) // return 10
Log.d("click", BigDecimal("10").stripTrailingZeros().toPlainString()) // return 10
Run Code Online (Sandbox Code Playgroud)

上面的代码返回相同的值 10 并且stripTrailingZeros()对其值没有影响。

Log.d("click", BigDecimal("10").scale().toString())  // return 0
Log.d("click", BigDecimal("10").stripTrailingZeros().scale().toString()) // return -1
Run Code Online (Sandbox Code Playgroud)

但这些值的范围不同,因为它返回 0 和 -1,而且

Log.d("click", BigDecimal("100").stripTrailingZeros().scale().toString()) // return -2
Log.d("click", BigDecimal("1000").stripTrailingZeros().scale().toString()) // return -3
Run Code Online (Sandbox Code Playgroud)

有什么办法可以得到我预期的结果吗?谁能解释为什么scale()方法返回负值?

java android bigdecimal

6
推荐指数
1
解决办法
2130
查看次数

标签 统计

android ×1

bigdecimal ×1

java ×1