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

目录

  • 项目介绍
  • 遇到的问题
  • 主要页面展示
  • 主要页面代码展示
    • 1.Show.jsp
    • 2.Cart.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。

主要页面展示

Servlet+JSP实现简易购物车功能_第1张图片
Servlet+JSP实现简易购物车功能_第2张图片

主要页面代码展示

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>

临别赠言

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

且行且珍惜!!!

你可能感兴趣的:(JSP程序)