加倍我的钱:我的框架使用双倍金额

tpd*_*pdi 9 java double currency

我继承了一个货币金额使用双重类型的项目.

更糟糕的是,它使用的框架和框架自己的类使用双倍的金钱.

框架ORM还处理从数据库(和存储)到数据库的值的检索.在数据库中,货币值是类型编号(19,7),但框架ORM将它们映射到双精度数.

如果没有完全绕过框架类和ORM,我能做些什么来准确计算货币价值?

编辑:是的,我知道应该使用BigDecimal.问题是我与一个框架紧密相关,例如,类framework.commerce.pricing.ItemPriceInfo有成员double mRawTotalPrice; 和双mListPrice.我公司的应用程序自己的代码扩展了,例如,这个ItemPriceInfoClass.

实际上,我不能对我的公司说,"废弃两年的工作,花费数十万美元,基于此框架的代码,因为四舍五入的错误"

Mic*_*tta 10

如果可以忍受,将货币类型视为不可或缺.换句话说,如果你在美国工作,跟踪美分而不是美元,如果美分提供你需要的粒度.双精度可以准确地表示整数,直到非常大的值(2 ^ 53)(没有舍入误差直到该值).

但实际上,正确的做法是完全绕过框架并使用更合理的东西.对于框架而言,这是一个业余的错误 - 谁知道还有潜伏的东西?


Rob*_*ner 6

我没有看到你提到重构.我认为这是你最好的选择.为什么不以正确的方式修复它,而不是把一些黑客扔在一起让事情变得更好?

这里有一些关于double和BigDecimal的信息.这篇文章建议使用BigDecimal即使它更慢.

  • 我希望它建议`BigDecimal` ...如果你的数字和计算是_incorrect_因为'double`,速度并不意味着什么. (2认同)