您的位置:首页 > Web前端

《effective java》48—如果需要精确的答案,请避免使用float和double

2018-03-01 12:38 274 查看
float和double类型并不适合用于货币计算,因为要让一个float或者double精确地表示0.1是不可能的。
比如:



可以看到计算结果并不正确。
解决这个问题的正确办法是使用BigDecimal、int或者long进行货币计算。
举个例子:
你口袋里有1块钱,货架上有价格从1毛、2毛、3毛一直到1块钱的糖果。你打算从标价为1毛的糖果开始买,每种买一颗,一直到不能支付货架上的下一种货物为止,那么可以买多少颗糖果?
方法一:使用BigDecimal



方法二:使用double,会得到错误的结果:



总结:对于任何需要精确答案的计算任务,请不要使用float和double。
如果性能非常关键,并且不介意自己记录十进制小数点,而且所涉及的数值又不大,就可以使用int或者long。
如果数值范围没有超过9位十进制数字,就可以使用int;
如果不超过18位数字,就可以使用long。
如果数值可能超过18位数字,就必须使用BigDecimal。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: