为了避免出现像 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()方法返回负值?