【发布时间】:2014-01-03 18:04:52
【问题描述】:
此问题是对问题 (BigDecimal - to use new or valueOf) 及其接受的答案的跟进。
为方便起见,重申问题和答案:
BigDecimal有两种方法:
double d = 0.1;
BigDecimal bd1 = new BigDecimal(d);
BigDecimal bd2 = BigDecimal.valueOf(d);
哪个更好?答案表明这些方法不会产生相同的结果:
System.out.println(bd1);
System.out.println(bd2);
显示:
0.1000000000000000055511151231257827021181583404541015625
0.1
在回答中,回答者说:
一般来说,如果结果相同(即不是在
BigDecimal的情况下,而是在大多数其他情况下),那么应该首选valueOf():它可以缓存常见值(如@ 987654328@),它甚至可以更改缓存行为,而无需更改调用者。 new 将始终实例化一个新值,即使没有必要(最好的例子:new Boolean(true)与Boolean.valueOf(true))。
我的问题是:我们能否获得一些实际示例,具体说明何时应该使用BigDecimal.valueOf() 以及何时应该使用new BigDecimal()?回答者说“如果结果相同,请使用 valueOf()”,但这并不能帮助我们知道何时使用它(如果有的话?)BigDecimal。
具体来说,哪个更可取:
0.1000000000000000055511151231257827021181583404541015625
或
0.1
?为什么?
【问题讨论】:
-
那么你想要哪个结果?他们以明确记录的方式做不同的事情。
-
你怎么知道你想要哪个?这就是问题的核心。一个会比另一个更好吗?为什么?
-
在哪种意义上更好?速度还是正确性?
0.1不能用二进制补码浮点精确表示。 -
@ryvantage 你期待哪一个?没有任何信息,我猜你想要
0.1,但只有你知道你的要求是什么。 -
“更好”的那个是导致整个程序为您提供所需结果的那个。而且我们不知道该程序应该做什么。
标签: java bigdecimal