我试图只使用浮点数后的 8 位数字,并将其余数字四舍五入到上限。当输入为 0.0 时,在舍入操作之后,我0E-8改为0.00000000
val test = BigDecimal.valueOf(0.0)
println(test.setScale(8, RoundingMode.CEILING))
Run Code Online (Sandbox Code Playgroud)
当我将值更改为 2.0 时,结果正如我预期的那样2.00000000
我是 Kotlin 的新手。我不明白原因。
是否以toString指数表示法返回数字记录如下:
首先,将 的未缩放值的绝对值
BigDecimal转换为以 10 为基数的字符串,使用字符“0”到“9”且不带前导零(除非其值为零,在这种情况下为单个“0”字符用来)。接下来,计算调整后的指数;这是负标度,加上转换后的未标度值中的字符数,减去一。即,
-scale+(ulength-1),其中ulength是以十进制数字表示的未缩放值的绝对值的长度(其精度)。如果小数位数大于或等于 0,并且调整后的指数大于或等于 -6,则数字将转换为字符形式,而不使用指数表示法。[...]
否则(即,如果小数位数为负数,或调整后的指数小于-6),数字将使用指数表示法转换为字符形式。[...]
根据文档,在 0 情况下,未缩放的值为“0”。其长度为 1。因此,调整后的指数为 -8 + (1 - 1) = -8。它小于-6,因此以指数表示法显示。
当数字为 2 时,未缩放的值为“200000000”,缩放为 8 时将其缩小为“2.00000000”。未缩放的值的长度为 9。因此,调整后的指数为 -8 + (9 - 1) = 0。这大于 -6,并且 8 的小数位数大于 0,因此 2.00000000 不会以指数形式显示符号。
请注意,您始终可以通过调用 来获取不采用指数表示法的字符串toPlainString。
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |