function toxiaoshu(x) { //保留一位小数
var f = Math.round(x*10)/10;
if (isNaN(f)) {
return 0;
}
return f;
}
function zbhjgs(){ //检查用户输入,并进行转换
var t=document.getElementsByName("tmp03");
var j=0;
var k="";
for(var i = 0; i < t.length; i++){
if (t[i].value!=''){
t[i].value=toxiaoshu(t[i].value);
j+=toxiaoshu(t[i].value);
}
}
document.getElementById("zonggongshi").innerHTML = j; //总工时
}
用户需要累积计算输入的工时
多个工时输入框
为什么用户输入1.1 和 0.6 会得出1.7000000000000001 ?
如何才能保证合计工时为一位小数的呢?
------解决方案--------------------
浮点型运算的时候就是有这样的BUG
- JScript code
Object.extend(Number.prototype, { add: function (num) { var reg = /\./i; var me = this; if (!reg.test(me) && !reg.test(num)) { return me += num; } var i1, i2; try { i1 = me.toString().split('.')[1].length; } catch (e) { i1 = 0; } try { i2 = num.toString().split('.')[1].length; } catch (e) { i2 = 0; } var m = Math.pow(10, Math.max(i1, i2)); return (me * m + num * m) / m; }, sub: function (num) { var reg = /\./i; var me = this; if (!reg.test(me) && !reg.test(num)) { return me -= num; } var i1, i2; try { i1 = me.toString().split('.')[1].length; } catch (e) { i1 = 0; } try { i2 = num.toString().split('.')[1].length; } catch (e) { i2 = 0; } var m = Math.pow(10, Math.max(i1, i2)); var n = (i1 >= i2) ? i1 : i2; return ((me * m - num * m) / m).toFixed(n); } });