其数据类型是容易代表像“10364055.81”十进制数。
如果使用双尝试:
double d = 10364055.81;
但是,当我尝试打印的数量,它显示为“1.036405581E7”,这是我不想要的。
我应该使用BigDecimal的? 但其作为显示10364055.81000000052154064178466796875。 是否有显示的值,因为它是任何数据类型? 也数目可以比取为例如一个更大。
顺便说一句,会使用BigDecimal的影响应用程序的性能? 我可能会在几乎所有我的DTO的使用。
你应该用BigDecimal的-但使用String构造函数 ,例如:
new BigDecimal("10364055.81");
如果你传递一个double
为BigDecimal,爪哇必须创建一个双第一-既然双打不能准确地代表最小数, 它创造的价值为10364055.81000000052154064178466796875
, 然后把它传递给BigDecimal的构造。 在这种情况下BigDecimal具有不知道,你实际上意味着全才版本的方式。
一般来说,使用BigDecimal的非String构造应该考虑到,你没有得到的类的全部好处警告。
编辑 -基于重读你想要做什么,我最初的要求可能是太强大了。 BigDecimal的是一个很好的选择,当你需要准确地表示十进制值(货币处理是显而易见的选择,你不想做5.99 *一百万是5990016.45
例如。
但是,如果你不担心数量来内部存储为一个非常略有不同的价值给你往里面只想在相同的格式再打印出来,然后根据其他人所说,实例十进制字面NumberFormat
(在这种情况下, new DecimalFormat("########.##")
将这样的伎俩来输出双好听,或者的String.format可以做同样的事情。
至于性能 - BigDecimals的自然会比使用原语慢。 通常情况下,虽然,除非绝大多数程序都涉及数学运算,你就不可能真正发现任何速度差。 这并不是说你应该全用BigDecimals的; 而是,如果你可以从他们的功能真正的好处,这将是很难或不可能用普通实现doubles
,然后不出汗微乎其微的性能差异,他们在理论上介绍。
如何显示的号码是从数量的存储方式不同 。
看看DecimalFormat的控制你怎么能显示你的号码,当双(或浮动等)。
需要注意的是选择BigDecimal的两倍以上(反之亦然)的优点/缺点,并且将取决于您的需求。 见这里获取更多信息。 从汇总:
总之,如果原始性能和空间是最重要的因素,原始的浮点类型是适当的。 如果十进制值需要被精确表示,高精度的计算是必要的,或舍入的精细控制是需要的,仅BigDecimal具有所需的能力。
双会为了拯救这个数字是不够的。 如果你的问题是你不喜欢的格式打印或把它变成一个字符串的时候,你可能会使用的NumberFormat: http://java.sun.com/javase/6/docs/api/java/text/NumberFormat.html
您可以使用双,如果有System.out.printf显示()。
double d = 100003.81;
System.out.printf("%.10f", d);
.10f - 是指具有10精度的双