在购物车(ShoppingCart)中计算物品的总价格时遇到一个问题

sxy0713 高级软件设计工程师  2006-02-19 05:49:57
定义了一个购物车:
public class ShoppingCart{
HashMap items=null;
int numberOfItems=0;

public ShoppingCart(){
items=new HashMap();
}

...

public synchroized double getTotal(){
double amount=0.0;

for(Iterator i=getItems().iterator();i.hasNext();){
ShoppingCartItem item=(ShoppingCartItem)i.next();
BookDetails bookDetails=(BookDetails)item.getItem();

amount+=(item.getQuantity()*bookDetails.getPrice());
}
return roundOff(amount);
}

private double roundOff(double x){
long val=Math.round(x*100);

return val/100;
}
...

}
不大明白roundOff方法的功能.*100,再/100,这样做有什么道理呢?是为了解决误差吗?查了一下手册,Math.round(double arg)返回最接近arg的long型值.
...全文
155 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sxy0713 2006-02-23
今天还是过来结帖.查阅了资料,也没有个结论.似乎是解决误差的.如今编程语言一遇到数学计算就傻眼~~
回复
sxy0713 2006-02-20
内存在做乘法时候会出错?price的类型是float(2byte),而amount的类型是double(4byte).假如有4本书,4个float相加可以得到1个double?
程序里的转换顺序为float-long-double.真让人晕啊~~看来java在做数学运算的时候是没有什么优势的.
回复
yh1004 2006-02-19
是的,好像就是为了精度问题,当二个数如12.01和45.17相加,按道理是57.18,但有可能是
57.1800000001,注:我是随便拿二个数来而已,数数相加只要遇上了就会出现这种情况,好像是有规则,具体我也没有研究过这是为什么,反正小心点好,钱嘛,错了可悔了,别的倒无谓
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2006-02-19 05:49
社区公告
暂无公告