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 ?
如何才能保证合计工时为一位小数的呢?

解决方案 »

  1.   

    浮点型运算的时候就是有这样的BUGObject.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);
        }
    });
      

  2.   

    http://hi.baidu.com/me_lsy/item/8b02cebfc3bb33a1ebba9328
      

  3.   

    截了得了,这样的问题追究太细也没啥价值。
    alert((1.6+0.1).toFixed(1));