要转换类型的
parseFloat()
parseInt()

解决方案 »

  1.   

    与楼主探讨一下,如果有问题的话请各位指正。以加法这个函数为例
    //加法
    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
    } 基本思路是两个数都乘上足够大的10的n次幂,转化为整数,进行计算后再除以相同的数,得到结果。但这个本身是存在问题的(虽然可能解决了部分情况下出现的问题)。比如说要把2.005转化为整数,不是简单的乘以1000就可以了的,因为2.005*1000.0这本身就是浮点数运算,不一定能得到整数。而是应该把2.005转化为字符串"2.005"然后进行纯字符串操作转化为"2005"并记下小数位数3,在后面的运算中对不同情况进行整数计算,最后再进行位数上的调整。楼主可以试下这个写法:http://blog.lnd.com.cn/?action-viewthread-tid-1473006至少函数中没有浮点数运算的语句,但我自己没怎么用过,不保证不出现问题~~
      

  2.   

    另外.toFixed()方法的一些问题:小数点前面必须有有效数字,否则可能出错,比如0.056.toFixed(1)会得到0.0而不是0.1,另外貌似不支持太低版本的浏览器
      

  3.   

    parseFloat(value)*1000000/1000000试试
      

  4.   

    转来供大家参考:function arithmetic(a, how, b)
    {
            if(a == null)
            {
                    a = 0;
            }
            if(b == null)
            {
                    b = 0;
            }        if(a.toString().indexOf(".") < 0 && b.toString().indexOf(".") < 0){
                    return eval(a + how + b);
            }
            var ra = a.toString().replace(' ', '');
            var rb = b.toString().replace(' ', '');
            
            var arr_a = ra.split(".");
            var arr_b = rb.split(".");
            
            var digit_a = (arr_a.length > 1) ? ra.split(".")[1].length : 0;
            var digit_b = (arr_b.length > 1) ? rb.split(".")[1].length : 0;
            
            var size = (digit_a > digit_b ? digit_a : digit_b);
            
            var tmp_a = ra.replace('.', '');
            var tmp_b = rb.replace('.', '');
            
            var int_a;
            var int_b;
            
            if(size == digit_a)
            {
                    int_a = Number(tmp_a);
            }
            else
            {
                    for(var i = 0; i < (size - digit_a); i++)
                    {
                            tmp_a += '0';
                    }
                    int_a = Number(tmp_a);
            }
            
            if(size == digit_b)
            {
                    int_b = Number(tmp_b);
            }
            else
            {
                    for(var i = 0; i < (size - digit_b); i++)
                    {
                            tmp_b += '0';
                    }
                    int_b = Number(tmp_b);
            }
            
            var mul;
            
            switch(how)
            {
                    case "+":
                            mul = size;
                            break;
                    case "-":
                            mul = size;
                            break;
                    case "*":
                            mul = 2 * size;
                            break;
                    case "/":
                            mul = 1;
                            break;
            }        var int_result = eval(int_a + how + int_b) / Math.pow(10, mul);
            
            return (int_result);
    }//alert(arithmetic(8.55, '-', 3.5)); 出处为:北国网论坛, 作者是:Lvivi
      

  5.   

     
    是要用parseFloat()或parseInt() 等函数进行类型转换的,且有所误差是正常的,可以多取几位小数点
      

  6.   

    误差避免不了也和你的系统有关联啊
    toString你用它转化你所需要的精度啊