我必须在我的代码中计算一个相当复杂的公式,我想知道如何决定我应该使用BigDecimal还是只使用double来计算。
该函数为:
f(x) = 1.03^(4 - ((1/3) * (x-9)^2))其中x是双四舍五入到4个小数点,例如1.2345
使用BigDecimal和double的优缺点是什么?如果我使用double来表示所有的东西,我可能会失去多少精度?
发布于 2016-03-10 17:27:58
使用BigDecimal胜过double的主要优点是,第一个可以在固定的小数位数上实现更高的精度。主要的缺点是BigDecimal需要更多的cpu操作才能进行相同的计算。
关于两者的精确度,如果你以旧的货币价值为例(我来自欧洲,然后是欧元),你可以立即看到,当最小单位是0.01欧元时,0,009欧元或更少是没有任何意义的。这是一个固定的精度值,BigDecimal可以很好地管理它。
如果你的问题的计算是关于需要足够好的精度(或者像Jonah所说的平均好的精度)的东西,并且没有定义好的最小单位,那么可以是一个浮点值。
发布于 2016-03-10 07:22:23
一个double平均可以准确地存储16个有效数字。我不认为在该公式中使用double会导致显著的数据丢失。但是,如果速度根本不是问题,那么使用BigDecimal将是我的选择。请参阅How many significant digits have floats and doubles in java?
https://stackoverflow.com/questions/35904447
复制相似问题