您应该使用BigDecimal-但 使用String构造函数 ,例如:
new BigDecimal("10364055.81");如果将a传递
double给BigDecimal,则Java必须首先创建该double,并且因为double无法准确表示大多数十进制小数,因此它 会
创建as值
10364055.81000000052154064178466796875, 然后
将其传递给BigDecimal构造函数。在这种情况下,BigDecimal无法知道您实际上是指舍入器版本。
一般来说,使用BigDecimal的非String构造函数应被视为警告,提示您没有充分利用该类的优点。
编辑
-基于完全重读您想做的事情,我的最初主张可能太强了。当您需要精确表示十进制值时,BigDecimal是一个不错的选择(例如,货币处理是显而易见的选择,例如,您不希望5.99
*一百万
5990016.45。
但是,如果你不担心次数存储 在内部
是一个非常略有不同的价值,文字输入的小数,只是想以相同的格式再打印出来,然后根据其他人所说,实例
NumberFormat(在在这种情况下,
newDecimalFormat("########.##"))将可以很好地输出double值,否则String.format可以完成很多操作。至于性能-
BigDecimals自然会比使用基元慢。不过,通常情况下,除非程序的绝大多数都涉及数学运算,否则您不太可能真正注意到任何速度差异。这并不是说您应该全部使用BigDecimals;但是,相反,如果您可以从纯功能很难或不可能实现的功能中获得真正的收益
doubles,那么就不要在理论上引入微小的性能差异。



