java – 在BigDecimal上下文中,是否可以使用小整数值初始化的double精确使用?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 在BigDecimal上下文中,是否可以使用小整数值初始化的double精确使用?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1835字,纯文字阅读大概需要3分钟。
内容图文
![java – 在BigDecimal上下文中,是否可以使用小整数值初始化的double精确使用?](/upload/InfoBanner/zyjiaocheng/824/c82d883537344ae38e1d5d985812738f.jpg)
有充分证据表明,使用double会导致不准确,只要混合中没有双打,BigDecimal就能保证准确性.
但是,如果双重问题是一个小的整数,是否保证了准确性?
例如,虽然以下内容不准确/不安全:
BigDecimal bdDouble = new BigDecimal(0.1d); // 0.1000000000000000055511151231257827021181583404541015625
以下内容总是准确/安全吗?
BigDecimal bdDouble = new BigDecimal(1.0d); // 1
假设使用BigDecimals可以安全地使用小的整数双打是否安全 – 如果是这样,引入不准确性的最小整数是多少?
>>回答初始答案的其他信息:
谢谢你的回答.很有帮助.
只是为了添加更多细节,我有一个提供双打的遗留接口,但我可以肯定这些双打将代表整数,它们自己通过Double.parseDouble(String)从Strings转换为double,其中String是保证的整数表示.
如果我可以避免它,我不想创建一个新的接口,它传递我的字符串或BigDecimals.
我可以立即将double转换为我接口上的BigDecimal,并使用BigDecimal调用进行所有内部计算,但我想确保它与创建新的BigDecimal / String接口一样安全.
鉴于在我的原始示例中使用0.1d并不能准确地得出0.1,如实际BigDecimal为0.1000000000000000055511151231257827021181583404541015625这一事实所示,似乎某些分数会引入不准确性.
另一方面,鉴于在我的原始示例中使用1.0d确实准确地得到1,看起来整数保持准确性.如果我正确理解你的答案,似乎保证最高值为2 ^ 53.
这是正确的假设吗?
解决方法:
BigDecimal方面与这个问题没有关系,因为“可以用double精确表示的整数范围是多少?” – 因为每个有限的double值都可以由BigDecimal精确表示,并且这是你调用BigDecimal(double)构造函数时得到的值.因此,您可以确信,如果您希望表示的值是一个完全可由double表示的整数,如果将该double传递给BigDecimal构造函数,您将获得一个完全代表相同整数的BigDecimal.
双精度的有效数是52位.由于规范化,这意味着您应该能够准确地存储[-253,253]范围内的整数值.这些都是非常大的数字.
当然,如果你只是在表示整数的业务,那么为什么你要使用双精度是有问题的……你需要确保你从原始源数据中使用的任何转换都是双重的不会丢失任何信息 – 但纯粹基于“什么范围的整数可以完全代表双重值”这个问题我相信以上是正确的……
内容总结
以上是互联网集市为您收集整理的java – 在BigDecimal上下文中,是否可以使用小整数值初始化的double精确使用?全部内容,希望文章能够帮你解决java – 在BigDecimal上下文中,是否可以使用小整数值初始化的double精确使用?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。