我在讨论是使用BigDecimal和BigInteger还是只使用BigDecimal来让我的生活更轻松,更少来回转换。在资源方面仅使用BigDecimal是否存在缺点?
如何仅使用原始数据类型和BigInteger或仅使用BigInteger来使我的生活更轻松,更少来回转换?
答案 0 :(得分:10)
来自:http://www.javamex.com/tutorials/math/BigDecimal_BigInteger_performance.shtml
请注意,BigDecimal本质上是一个围绕BigInteger的包装器,它“记住小数点的位置”。
由于我们习惯于处理数字的方式,作为人类,当用非整数计算与整数相比时,我们可能不得不“多思考”(例如,我们可能已经通过心脏加速某些计算,但可能不是.7倍表)。但是对于计算机实现来说,操作非整数本质上并不比整数更省力,因此总的来说,BigDecimal上的方法往往与BigInteger上的类比方法类似。
答案 1 :(得分:0)
如果您正在开发低延迟应用程序并且每微秒都很重要,那么BigDecimal / BigInteger不适合您。除此之外,BigDecimal / BigInteger没有明显的影响。
BigDecimal的预制格式低于long
,double
。与BigInteger相同的苹果及其相应的原语。
答案 2 :(得分:0)
我知道您的问题的标题是“BigDecimal与BigInteger和BigDecimal的性能”,但您的一个问题是“如何仅使用原始数据类型和BigInteger或仅使用BigInteger”。那么这就是我的建议:
如果您需要准确性,精确度以及大量财务数据等工作,那么最好使用BigDecimal和BigInteger而不是原始类型。 BigDecimal和BigInteger的其他特性也很少:
现在回到主要问题的表现,两者之间的表现没有太大区别。如果您可以在BigDecimal中显示您的信息,那么您不必将其转换为BigInteger,而是再次查看该程序,看看是否一直只使用BigDecimal。 BigInteger和BigDecimal之间的主要区别在于BigInteger支持任意精度整数,BigDecimal用于任意精度定点数。
以下是我的消息来源并祝你好运:)
答案 3 :(得分:-1)
如果您对大数字的表现非常担心,我会像瘟疫一样避免使用Java BigInteger
和BigDecimal
。
两者都使用慢速(渐近和合理小输入)算法进行乘法,除法和基数转换。如果它被证明是一个瓶颈,你没有办法用更有效的算法替换它们,而不是编写你自己的BigInteger
兼容的大数字并做一个大的重构。
如果您正在处理大整数,那么使用围绕GMP和MPFR的Java包装器可能要好得多。 "大"这可能是几百位数,因为Java在调用本机方法时所做的事情。