这和java中的double浮点类型的变量运算类似,具体的内在机制我也不是很清楚,给你一个函数吧,用来格式化小数的,小数点后的位数可以指定。/**
 * @功能:将小数四舍五入。
 * @param sourceValue: 进行四舍五入的字符串,不能为空。
 * @param decimalNum: 保留小数点后几位,默认为2,可以为空。
 * @param ifReturnZero: 当传入的字符串为空时是否返回格式化的0,如0.00,默认为false,可以为空。
 */
function roundFloat(sourceValue,decimalNum,ifReturnZero) 
{
if(sourceValue=='')
{
if(ifReturnZero) 
sourceValue = 0;
else
return '';
}
//如果传入字符串不是数值,则原样返回。
         if(isNaN(sourceValue)) return sourceValue;
         //如果没有指定decimalNum,则decimalNum默认为2位。
if(typeof(decimalNum)=='undefined' || decimalNum=='') decimalNum = 2;
var multiplyValue=Math.pow(10,parseInt(decimalNum));
return (Math.round(multiplyValue*sourceValue))/multiplyValue;
}

解决方案 »

  1.   

    可以用toFixed
    var aa=111.12345;
    alert(aa.toFixed(2));
      

  2.   

    用正则表达式:
    <script language="javascript">  num="0.3000"; //string or number
      
      num2 = num.toString().replace(/(^\d*\.\d*?)(0*$)/,"$1"); //去掉小数点最后的所有0  alert(num2);
      
    </script>
      

  3.   


    在计算机中因为采用的是二进制,所以大多数小数都存在着“精度”的问题,这是不可避免的在我的计算机中“0.1+0.2”的结果是“0.30000000000000004”,这并不是多“0”只是因为后面还有有效数字。如果“0”后面没有有效数字的话,“0”是会自动消去的,所以上面的那个正则没有任何意义:
    //num.toString().replace(/(^\d*\.\d*?)(0*$)/,"$1"); 而toFixed()函数的不足我想你也试过了的。
    实际上你的小数无论如何是很少超过15位的,那么用“Math.round()”方法四舍五入到15位就可以把小数点后的“0”去掉了。例如:<script>
    var a=0.1;
    var b=0.2;
    var c=a+b;
    c=Math.round(c*1000000000000000)/1000000000000000
    alert(c);
    </script>