Servlet+JSP实现简易购物车功能

项目介绍

同上一篇参考着JSP程序设计教程(第二版)教材完成了简易购物车的功能实现,在此对期间遇到的问题及部分页面展示如下

遇到的问题

期间在购物车展示页面计算显示单个商品的金额时候遇到了浮点数相乘结果保留小数位数的问题,理论上3.0*2.8结果应该为8.4,但未进行小数位数保留时候在页面计算显示出来的结果却为8.39999999999,猜测其原因可能是因为计算机对数据的处理与我们数学计算的方式不太一样导致。处理前代码如下:

Double money=num*1.0*price;    // 2.8*3.0结果得到8.399999999999
sum+=money;//计算应付金额

特对此进行了保留两位小数的处理,采用的保留两位小数方式如下:

String money=new DecimalFormat("#.00").format(num*1.0*price);//保留两位小数
sum+=Double.parseDouble(money);//计算应付金额

这样,程序按照预计的结果输出了2.8*3.0的结果为8.40。

主要页面展示

购买商品页面
购物车页面

主要页面代码展示

1.Show.jsp

<%@page import="Class.Good"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>商城</title>
</head>
<body>
<%  ArrayList goods=(ArrayList)application.getAttribute("goods");
%>
<table border="1" width="450px" rules="none" cellspacing="0" cellpadding="0">
	<tr height="50px"><td colspan="3" align="center">提供商品如下</td></tr>
	<tr align="center" height="20px" bgcolor="lightgrey">
		<td>名称</td>
		<td>价格(/)</td>
		<td>购买</td>
	</tr>
	<% if(goods==null||goods.size()==0){ %>
	<tr height="100px"><td colspan="3" align="center">没有商品可显示!</td></tr>
	<% } 
	else{
		for(int i=0;i<goods.size();i++){
			Good good=(Good)goods.get(i);
	%>
	<tr height="50px" align="center"> 
		<td><%=good.getName() %></td>
		<td><%=good.getPrice() %></td>
		<td><a href="DoCart?action=buy&id=<%=i%>">购买</a></td>
	</tr>
	<%
		}
	}
	%>
	<tr height="50px">
		<td align="center" colspan="3"><a href="Cart.jsp">查看购物车</a></td>
	</tr>
</table>
</body>
</html>

2.Cart.jsp

<%@page import="java.text.DecimalFormat"%>
<%@page import="Class.Good"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>我的购物车</title>
</head>
<body>
<%
	ArrayList buylist=(ArrayList)session.getAttribute("buylist");//获取存储在session中的用户已买商品集合对象
	float sum=0;//存储应付金额
%>
<table border="1" width="450px" rules="none" cellspacing="0" cellpadding="0">
	<tr height="50px"><td align="center" colspan="5">购买的商品如下</td></tr>
	<tr height="30px" bgcolor="lightgrey">
		<td width="25%" align="center">名称</td>
		<td>价格(/)</td>
		<td>数量</td>
		<td>总价()</td>
		<td>移除(-1/)</td>
	</tr>
	<% if(buylist==null||buylist.size()==0){ %>
		<tr height="100px"><td align="center" colspan="5">购物车为空!</td></tr>
	<% }
	else{
		for(int i=0;i<buylist.size();i++){
			Good good=(Good)buylist.get(i);
			String name=good.getName();//获取商品名称
			Double price=good.getPrice();//获取商品价格
			int num=good.getNum();//获取购买数量
			String money=new DecimalFormat("#.00").format(num*1.0*price);//保留两位小数
			sum+=Double.parseDouble(money);//计算应付金额
			//Double money=num*1.0*price;    // 2.8*3.0结果得到8.399999999999
			//sum+=money;//计算应付金额
	%>
	<tr align="center" height="50px">
		<td><%=name %></td>
		<td><%=price %></td>
		<td><%=num %></td>
		<td><%=money %></td>
		<td><a href="DoCart?action=remove&name=<%=good.getName() %>">移除</a></td>
	</tr>
	<% 
		}
	}
	%>
	<tr align="center" height="50px"><td colspan="5">应付金额:<%=sum %></td></tr>
	<tr align="center" height="50px">
		<td colspan="2"><a href="Show.jsp">继续购买</a></td>
		<td colspan="3"><a href="DoCart?action=clear">清空购物车</a></td>
	</tr>
</table>
</body>
</html>

临别赠言

人生天地间,忽如远行客;

且行且珍惜!!!

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值