【发布时间】:2018-10-02 04:51:37
【问题描述】:
我想用钱做一些计算。为了防止舍入错误,我决定使用 BigDecimal 而不是 double 或 float。现在我想,这不是一个好主意,因为它使计算变得极其困难。
我创建了一个名为 Euro 的类,它从 BigDecimal 扩展来覆盖 toString 和 equals 方法。
现在,如果我想向欧元对象添加一个数字,我会这样做
Euro sum = (new Euro(10)).add(new Euro(15));
这里的问题是 add(...) 从 BigDecimal 类返回一个我不能转换为 Euro 的对象,所以我将它添加到 Euro 类:
public Euro add(Euro euro){
return new Euro(euro.add((BigDecimal) this).floatValue());
}
我现在可以做什么,而不是用 Euro 重写 BigDecimal 的所有方法?我想,最好的解决方案是使用整数而不是 BigDecimal,因为我可以写
int sumCents = 1000 + 1500;
而不是上面的长期。
【问题讨论】:
-
不要扩展 BigDecimal。它不应该被延长。它实际上应该是最终版本,这不仅是因为他们忘记在第一个版本中将其定为最终版本,而是保持这种状态以保持向后兼容。如果您想创建一个 Euro 类,请使其使用(即包装)BigDecimal。不延长它。不知道为什么不直接使用 BiDecimal,以及为什么将结果转换为浮点值,因为您正是想避免使用浮点数。
标签: java bigdecimal