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,我如何使用现有的语言库确保它正确舍入?任何方向都是赞赏的。- 谢谢-谢谢
1条答案
按热度按时间axr492tv1#
这是您指定的舍入模式。HALF_EVEN表示精确到偶数的0.5轮。如果不需要,请指定您喜欢的舍入模式。HALF_UP可能是你想要的。