在Java中,使用float可以表示浮点数这是个常识,但是float的精度是有问题的,如果涉及金额,那么一般来说就不能用float类型,而是使用BigDecimal,这是个需要掌握的准则。
Commodities,java(商品类)
public class Commodities{
//商品ID
private int commoditiesid;
//商品名称
private String commoditiesname;
//商品类型
private String commoditiestype;
public int getCommoditiesid() {
return commoditiesid;
}
public void setCommoditiesid(int commoditiesid) {
this.commoditiesid = commoditiesid;
}
public String getCommoditiesname() {
return commoditiesname;
}
public void setCommoditiesname(String commoditiesname) {
this.commoditiesname = commoditiesname;
}
public String getCommoditiestype() {
return commoditiestype;
}
public void setCommoditiestype(String commoditiestype) {
this.commoditiestype = commoditiestype;
}
}
Commoditiesorder.java(订单类)
public class Commoditiesorder{
//订单ID
private int orderid;
//商品ID
private int commoditiesid;
//商品数量
private int volume;
//商品金额
private float amount;
public int getOrderid() {
return orderid;
}
public void setOrderid(int orderid) {
this.orderid = orderid;
}
public int getCommoditiesid() {
return commoditiesid;
}
public void setCommoditiesid(int commoditiesid) {
this.commoditiesid = commoditiesid;
}
public int getVolume() {
return volume;
}
public void setVolume(int volume) {
this.volume = volume;
}
public float getAmount() {
return amount;
}
public void setAmount(float amount) {
this.amount = amount;
}
}
以上是两个实体entity,从表示层(JSP)到模型层(Action)的数据传递通过CommoditiesorderAction来实现
CommoditiesorderAction.java类
public class CommoditiesorderAction extends ActionSupport{
//订单ID
private int orderid;
//商品ID
private int commoditiesid;
//商品数量
private int volume;
//商品金额
private float amount;
//Commoditiesorder实例
private Commoditiesorder commoditiesorder
public int getOrderid() {
return orderid;
}
public void setOrderid(int orderid) {
this.orderid = orderid;
}
public int getCommoditiesid() {
return commoditiesid;
}
public void setCommoditiesid(int commoditiesid) {
this.commoditiesid = commoditiesid;
}
public int getVolume() {
return volume;
}
public void setVolume(int volume) {
this.volume = volume;
}
public float getAmount() {
return amount;
}
public void setAmount(float amount) {
this.amount = amount;
}
public Commoditiesorder getCommoditiesorder() {
return commoditiesorder;
}
public void setCommoditiesorder(Commoditiesorder commoditiesorder) {
this.commoditiesorder = commoditiesorder;
}
public String execute()throws Exception{
this.commoditiesorder.setOrderid(this.getOrderid());
this.commoditiesorder.setVolume(this.getVolume());
this.commoditiesorder.setAmount(this.getAmount());
return "success";
}
}
在CommoditiesorderAction.java类中,
this.commoditiesorder.setAmount(this.getAmount())
amount使用了float类型,但是由于amount的含义是金额,那么就设涉及到主体业务中金额的算法,因此需要对amount进行类型转换。
解决方案:将Action中的amount类型改为String,在与Commoditiesorder.java交换值时进行处理
//商品金额
private String amount;
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
然后在Action中处理String到BigDecimal类型的转换
//空值处理
if(this.getAmount().equals("")){
this.commoditiesorder.setAmount(null);
}else{
this.commoditiesorder.setAmount(new BigDecimal(this.getAmount()));
}
需要注意的是BigDecimal不支持空值实例化,故要判断空值。另外可以利用Struts提供的
将“空”值转换为null的小技巧,只需在web.xml中设置
<init-param>
<param-name>convertNull</param-name>
<param-value>convertNull</param-value>
</init-param>
这样就不需要对空值进行判断了。
分享到:
相关推荐
java.math.BigDecimal 操作类,包含加减乘除、String型加减乘除精度格式化转换计算等
Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE...
解决mongo数据插入时 报错问题 mogodb插入数据时报错Can't find a codec for class java.math.BigDecimal
BigInteger.java BigDecimal.java 文件 源代码
string转bigdecimal类型
在 Java 编程中,经常需要对数字类型的数据进行转换。其中,BigDecimal 是一种高精度的十进制浮点数类型,适合处理大数值计算。在一些需求中,我们可能需要将 BigDecimal 值转换为 Integer 类型。这时,可以使用 ...
JAVA基础:java.math.BigDecimal的使用方法. JAVA基础:java.math.BigDecimal的使用方法.
BigDecimal类,常用方法是用介绍
NULL 博文链接:https://ollevere.iteye.com/blog/1528655
主要介绍了Java中BigDecimal类的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Java中BigInteger的数学运算,BigDecimal 加减乘除运算,Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大...
Java源码根据消费金额计算折扣.rar
关于java中BigDecimal的简介(csdn)————程序
主要介绍了Java编程BigDecimal用法实例分享,具有一定参考价值,需要的朋友可以了解下。
string转bigdecimal类型完成了string转bigdecimal类型的操作一行代码搞定
java丢失精度,bigdecimal加减乘除
之前写过用vector、string实现大数加法,现在用java的BigDecimal类,代码简单很多。但是在online-judge上,java的代码运行时间和内存大得多
如果这对您来说是个问题: node> 0.1 + 0.2 0.30000000000000004 那么你需要 Javascript 的 BigDecimal。 BigDecimal 非常适合金融信息的算术,或任何超过 Javascript Number (IEEE-754 float) 类型的东西。 Decimal...
BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负scale 次幂。
BigDecimal工具类.docx