我知道BigDecimal是用于在Java中表示货币价值的推荐最佳实践.你用什么?您是否更喜欢使用更好的库?
BigDecimal
一路走来.我听说有些人创建他们自己的Cash
或Money
类,用货币封装现金价值,但在皮肤下它仍然是一个BigDecimal
,可能有BigDecimal.ROUND_HALF_EVEN
四舍五入.
编辑:正如Don在他的回答中提到的那样,有一些像timeandmoney这样的开源项目,虽然我赞扬他们试图阻止开发人员不得不重新发明轮子,但我对前alpha库的使用还不够它在生产环境中.此外,如果你在引擎盖下挖掘,你会发现它们BigDecimal
也在使用.
对于通过搜索引擎到达这里的人来说,了解JodaMoney非常有用:http://www.joda.org/joda-money/.
我不是在这里表达我的观点,但是有一些很好的论据反对BigDecimal,有人应该抛出:
http://lemnik.wordpress.com/2011/03/25/bigdecimal-and-your-money/
我之前遇到的一个方便的库是Joda-Money库.它的一个实现确实基于BigDecimal.它基于ISO-4217货币规范,可以支持自定义货币列表(通过CVS加载).
该库包含少量文件,如果需要修改,可以快速完成.Joda-Money是在Apache 2.0许可下发布的.
如果你只是使用美元和美分,我会使用一个长(偏移2位小数).如果您需要更多细节,可以选择大小数.
无论哪种方式,我可能会扩展类以使用正确格式的.toString(),并作为放置其他可能出现的方法的地方(如果小数点是非长的,则乘法和除法会出错不调整)
此外,如果您使用定义自己的类和接口,那么您可以随意替换实现.