首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

js 1.1添0.6 等于1.7000000000000001 ?

2012-09-24 
js 1.1加0.6 等于1.7000000000000001 ???function toxiaoshu(x) {//保留一位小数var f Math.round(x*10)

js 1.1加0.6 等于1.7000000000000001 ???
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);    }}); 

热点排行