kotlin 如果十进制以5位数结尾,则DecimalFormat的行为不同

aurhwmvo  于 2023-08-06  发布在  Kotlin
关注(0)|答案(1)|浏览(117)

DecimalFormat在Android [Kotlin]和Kotlinscratch file in my Android Studio,if decimal digits end at 5.

比如说;如果我尝试使用2位小数格式化10.495,Android显示10.50,而Kotlinscratch文件返回10.49
请注意,我的Mac OSX安装了Java 17,因此Kotlin文件在Java 17上运行。而build.gradle已经配置为使用jvm 11。我尝试在build.gradle中使用Jvm 17,但结果仍然相同。

编码:
fun formatNumber(num: Double): String {
    val df = DecimalFormat("0.00")
    df.roundingMode = HALF_EVEN
    return df.format(num)
}

字符串

Android格式化结果

| 舍入| Rounded off |
| --| ------------ |
| 二十三点八| 23.80 |
| 十五点九八| 15.98 |
| 10.50 <--| 10.50 <-- |
| 49.50| 49.50 <-- |

Kotlin临时文件格式化结果

| 舍入| Rounded off |
| --| ------------ |
| 二十三点八| 23.80 |
| 十五点九八| 15.98 |
| 10.49 <--| 10.49 <-- |
| 49.51| 49.51 <-- |
请注意最后两个数字的区别。我想知道为什么两者有不同的结果。我尝试了不同的舍入模式,但没有帮助。即使是iOS和Web也有与Kotlinscratch文件相同的结果。我在JDK中遇到了this bug,但它已被标记为已解决。即使使用BigDecimal也无济于事。如果最后一个数字是5,我如何使用现有的语言库确保它正确舍入?任何方向都是赞赏的。- 谢谢-谢谢

axr492tv

axr492tv1#

这是您指定的舍入模式。HALF_EVEN表示精确到偶数的0.5轮。如果不需要,请指定您喜欢的舍入模式。HALF_UP可能是你想要的。

相关问题