在购物车(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型值.
...全文
299 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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,注:我是随便拿二个数来而已,数数相加只要遇上了就会出现这种情况,好像是有规则,具体我也没有研究过这是为什么,反正小心点好,钱嘛,错了可悔了,别的倒无谓

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧