2 cp19922011 cp19922011 于 2016.04.18 09:53 提问

JS中数据相加回显至JSP上精度问题

以下是显示的截图:
图片说明
图中的数据相加是可以正常显示的,然后下面的两项在一起的时候,就出bug了。
图片说明
其他的任意两项加都不会出现这种问题。
在Javabean中对数据采用的是BigDecimal的格式

javabean数据处理
public double getSubtotal() {
BigDecimal currPrice = new BigDecimal(book.getCurrPrice() + "");
BigDecimal count = new BigDecimal(quantity + "");
return currPrice.multiply(count).doubleValue();
}

在JS中对从JSP页面中抓取的数据作了先转化为text格式,然后Number(text),进行转换了。

js数据处理
function total(){
var total = 0;
$(":checkbox[name=checkboxBtn][checked=true]").each(function(){
var id = $(this).val();
var text = $("#" + id + "Subtotal").text();
total += Number(text);
});
$("#total").text(total);
}

JSP页面显示:


¥
${cartItem.subtotal }

完全找不到bug点在哪儿?

2个回答

igangnamstyle
igangnamstyle   2016.04.18 10:05

这个问题我遇到过,属于JS浮点型数值运算的缺陷。给你一个方法。

function accAdd(arg1,arg2){
var r1,r2,m;
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2));
return (arg1*m+arg2*m)/m;
}

cp19922011
cp19922011 谢谢了,原理就是你说的这样子,我JS用的不熟悉,就是有些Java中的方法,在js里面不知道到底能不能用,怎么用一堆问题0.0
2 年多之前 回复
showbo
showbo   Ds   Rxr 2016.04.18 15:02

toFixed下,js有精度问题.

javascript浮点数运算精度问题

 $("#total").text(total.toFixed(2));
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java jsp js 实现地区表 三级联动,并修改时数据回显
js:方法//下一级 function areaNext(id){ if($("#area"+id).val() == 0){ document.getElementById("area1"+id).options[0].selected=true; document.getElementById("area2"+id).options[0].selected=true; do
解决jsp页面数字精度丢失的问题
有时候涉及到数字计算的情况下,jsp页面可能会出现精度丢失的问题,例如,1.0显示成0.99999999这种问题。下面是这个问题的解决方案,以供参考。
jsp数据回显问题(尤其是radio类型)
修改信息时从servlet获取信息输出在jsp页面上但是radio单选的回显搞不好了,然后查资料找了一个最基础的servlet写法,代码如下只写了jsp中的代码: <%@page contentType="text/html; charset=UTF-8" %> <html> <head> <title>修改页面</title> </head> <body>
图片回显(上传前预览)功能
一、html代码 二、js代码 function fileChang(e){ for (var i = 0; i                     var file = e.target.files.item(i);                     if (!(/^image\/.*$/i.test(file.type))) {
js实现图片上传到服务器和回显
关于js实现图片的上传和回显,曾经用户的代码粘在这里:样式:这样写样式的道理是给&amp;lt;input&amp;gt;标签的父级设置一个背景图,就是‘+’那个背景图,然后把&amp;lt;input&amp;gt;的宽高设置得跟父级一样,且完全透明(注意是透明不是隐藏),这样点击的时候看似是点击的‘+’的节点,其实点击的是&amp;lt;input&amp;gt;节点。.file-box { position: re...
js小数相加、相乘失去精度问题解析详解(最优方案)
我们得到后台返回的float类型的数字,用来相加、相乘失去精度,得到小数点显示很多位,为了这个问题,小编找到一个最优方法,贡献给大家参考。 var CMX = CMX || {}; /** ** 加 **/ CMX.add = function (arg1, arg2) { var r1, r2, m, c; try { r1 = arg1.toString().split(
js浮点数运算精度问题
转自:http://talentluke.iteye.com/blog/1767138大多数语言在处理浮点数的时候都会遇到精度问题,但是在JS里似乎特别严重,来看一个例子 alert(45.6*13); 结果居然是592.800000000001,当然加法之类的也会有这个问题 那这是js的错误吗? 当然不是,你的电脑做着正确的二进制浮点运算,但问题是你输入的是十进制的数,电脑以二进制运算,这
JSP页面select下拉框数据回显
MVC框架下JSP页面select下拉框数据回显
js精度问题解决方案
Math.formatFloat = function(f, digit) { var m = Math.pow(10, digit); return parseInt(f * m, 10) / m; } var numA = 0.814; var numB = 0.315; alert(Math.formatFloat(numA/numB, 2));
单选框回显效果的解决办法
-