2011-04-24 46 views
1

自从我写了处理金钱的应用程序已经有一段时间了。多年前,我会在幕后制作一个处理整数的金钱对象。每当金额打印在某个地方,它就会将小数点放在正确的位置。这是为了防止小数点问题。对于java应用程序,在处理金钱时使用BigDecimal是否安全,还是应该使用整数并为金钱创建抽象?

我还需要这样做,还是我可以使用BigDecimal?现在认为最佳做法是什么?

+1

附注,但我一直很好奇这件事(从来没有真正处理它):是“双”*实际上是不安全的*为钱?我不能相信在分水平会出现舍入误差......任何人都会介意分享一个“双”会危险的计算例子吗? – Mehrdad 2011-04-24 04:47:50

+0

@Mehrdad考虑一种情况,即您的小数点不能用浮点完全表示。如果这个小数表示为小于期望值的最大值,则比较(例如'balance <= spendCost')将失败,当它应该成功时。 – corsiKa 2011-04-24 04:51:02

+0

http://stackoverflow.com/questions/316727/is-a-double-really-unsuitable-for-money – sjr 2011-04-24 04:51:21

回答

1

这取决于您的要求。您可能只需要解析到最近的K(例如,工作发布网站上的工资要求)。

假设您的意思是您需要粒度,BigDecimal似乎完全适合这项工作。它似乎肯定是“安全”使用,但不知道你打算如何处理它,很难说一定。

+0

那么,使用普通双数据库即使添加也会有简单的数学问题是常识。这是不可接受的。我很好奇你是否碰到过BigDecimal的相同问题。使用int不是什么大问题 - 我可以。我不在乎那么多。但是,如果我可以通过使用BigDecimal来简化我的代码,我真的会喜欢它。节省时间。 – egervari 2011-04-24 04:57:55

+1

提供BigDecimal是为了避免“这些问题”的唯一目的所以就像我说的,在一般情况下是的,我会说没关系。但是您可能正在做一些BigDecimal尚未准备好处理的事情。 BigDecimal适用于我能想到的每一笔金钱申请。 – corsiKa 2011-04-24 04:59:55

相关问题