Java中计算的正确数据类型是什么

时间:2010-06-02 10:10:19

标签: java types math

我们应该在Java中使用double或BigDecimal进行计算吗?

与双倍相比,BigDecimal的性能开销是多少?

6 个答案:

答案 0 :(得分:5)

对于一般浮点计算,您应该使用double。如果你完全确定你确实需要任意精度算术(大多数应用程序没有),那么你可以考虑BigDecimal

对于double足够精确的任何应用程序,您会发现BigDecimal将明显优于double(更不用说更容易使用了)。

更新:您评论了另一个答案,您希望将其用于与财务相关的应用程序。这是您实际应该考虑使用BigDecimal的区域之一,否则您可能会从double计算中获得意外的舍入效果。此外,double值的精确度有限,而且您无法在数百万美元的同时准确跟踪便士。

答案 1 :(得分:3)

  

与双倍相比,BigDecimal的性能开销是多少?

很多。例如,两个双精度的乘法是单个机器指令。将两个BigDecimal相乘可能至少有50条机器指令,其复杂度为O(N * M),其中MN是用于表示这两个数字的字节数。

但是,如果您的应用程序要求计算“十进制正确”,那么您需要接受开销。

然而(#2)......偶数BigDecimal无法使用实数准确度进行此计算:

       1/3 + 1/3 + 1/3  ->  ?

答案 2 :(得分:3)

对于严肃的财务应用,BigDecimal是必须的。

取决于您需要多少位数,您可以使用长和小数因素进行可视化。

答案 3 :(得分:1)

一如既往:这取决于。

如果您需要精确度(即使是“小”数字,例如表示金额时),请使用BigDecimal

在某些科学应用中,double可能是更好的选择。

答案 4 :(得分:0)

即使在金融领域,我们也无法在不知道哪个领域的情况下回答例如,如果您进行数十亿美元的货币转换,转换率可能为5 d.p.你可能有双重问题。然而,只需简单地添加和减去余额就可以了。

如果你不需要以分数/分钱的分数工作,也许整数类型可能更合适,同样取决于所涉及数字的大小。

答案 5 :(得分:-2)

字节= 8 bit

短= 2 byte = 16 bit

int = 4 byte = 32 bit

long = 8 byte = 64 bit

float = 4 byte = 32 bit

double = 8 byte = 64 bit

简单计算:

2字节= 1 short

2 int = 1 long

2 short = 1 int

float = int

2 float = double