java.math.BigDecimal除法不准确
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java.math.BigDecimal除法不准确,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1299字,纯文字阅读大概需要2分钟。
内容图文
![java.math.BigDecimal除法不准确](/upload/InfoBanner/zyjiaocheng/820/08e84249e3724d2fba3349aa4f95ae7f.jpg)
在Kotlin,BigDecimal分部返回奇怪的结果.
BigDecimal(1.0) / BigDecimal(2.0)
// returns 0.0
// Just like Int(1) / Int(2) returns 0
但:
BigDecimal(1.1) / BigDecimal(2.0)
// returns 0.55
// Just like Double(1.1) / Double(2.0) returns 0.55
那么为什么会发生这种情况呢?如何在不使用divide()给出scale参数的情况下使用BigDecimal使1.0 / 2.0返回0.5?
更新:
以下是完整的代码:
Welcome to Kotlin version 1.2.41 (JRE 1.8.0_172-b11)
Type :help for help, :quit for quit
>>> import java.math.BigDecimal
>>> BigDecimal(1.0) / BigDecimal(2.0)
0
>>> BigDecimal(1.1) / BigDecimal(2.0)
0.550000000000000044408920985006261616945266723632812
更新2:
根据@ user2864740
BigDecimal(1.0).divide(BigDecimal(2.0))
// returns 0.5
和
BigDecimal("1.0") / BigDecimal(2.0)
// returns 0.5
结果令人困惑.对于BigDecimals,为什么1.0 / 2.0返回0.0,1.0.divide(2.0)返回0.5,而“1.0”/ 2.0返回0.5?
解决方法:
如果您明确地编写divide,它将以与在Java中相同的方式工作:
val a = BigDecimal(1.0)
val b = BigDecimal(2.0)
val x = a.divide(b) // 0.5
当您使用/运算符时,它将转换为标准库中的BigDecimal.div扩展名,该扩展名执行以下操作:
Enables the use of the / operator for BigDecimal instances.
The scale of the result is the same as the scale of this (divident), and for rounding the RoundingMode.HALF_EVEN rounding mode is used.
您可以查看不同的RoundingMode常量如何工作here.
内容总结
以上是互联网集市为您收集整理的java.math.BigDecimal除法不准确全部内容,希望文章能够帮你解决java.math.BigDecimal除法不准确所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。