如何避免jQuery四舍五入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何避免jQuery四舍五入相关的知识,希望对你有一定的参考价值。

刚刚用jQuery写了一个简答的进度条,但是遇到了问题,就是jQuery它会自动的四舍五入,比如5.5,它就会认为是6,最终导致进度一直是1px,感觉是因为四舍五入的问题,求大神们瞅瞅怎么解决。。。初学者无力唉。。。在此写过各位大大啦!~
下面是全部代码,无需任何素材,只需一个jQuery包即可。。。
---------------------------------------------------------------------------------------------------------
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>进度条</title></head><style>/* 外层进度条样式 */#jdt_w width:500px; height:50px; border:#063 solid 1px;/* 内层进度条样式 */#jdt_n width:0px; height:100%; background-color:#0F0;</style><body> <div id="jdt_w"> <div id="jdt_n"></div> </div></body></html><script src="jQuery/jquery-1.9.1.min.js"></script><script>//jQuery入口$( function () var jdt_add = setInterval("add()",1000); //定时器 );//进度递增函数function add() //变量区 var jdt_n_w = $("#jdt_n").width(); //内层进度条的当前宽度 var jdt_w_w = $("#jdt_w").width(); //外层进度条的宽度 var z_time = 180; //假设一首歌曲需要180秒的播发时间 /* 总时间除以外层进度条的宽度得出每秒钟需要走多少像素[注释写在这里是为了避免与“/”号冲突] */ var v_add = z_time / jdt_w_w; if(jdt_n_w >= jdt_w_w) //如果内层进度条的宽度大于或等于外层进度条的宽度就停止 clearInterval(jdt_add); //清除定时器(停止) else //否则就继续 $("#jdt_n").width(jdt_n_w + v_add); //jdt_n_w 表示内层进度条的当前宽度,v_add 表示每次加多少像素 </script>
--------------------------------------------------------------------------
注解:
var v_add 的最终计算结果是 0.36
-----------------------------------------------------
下面是效果图[仔细看可以看到走了一点点,这一点的长度应该就是0.36px吧,个人猜测..]:

你可以parseFloat来确定精度,然后再用fixed来确定保留的小数位 参考技术A 暂时帮不了你

jquery 四舍五入截取字符串

这样的数据23.25666666666 转换为23.26
留2个小数四舍五入 怎么实现?

趁我写例子这点时间有两个人回答了 呵呵

刚才试验过了 看下例子吧

JS 方法:

<script type="text/javascript">
// 得到字符串的真实长度(双字节换算为两个单字节)
function getStrActualLen(sChars)

//sChars.replace(/[^\\x00-\\xff]/g,"xx").length/1024+"字节";
//Math.round(sChars.replace(/[^\\x00-\\xff]/g,"xx").length/1024);这个貌似不好使
return alert(formatNum(sChars.replace(/[^\\x00-\\xff]/g,"xx").length/1024,4));

//格式化小数,并四舍五入。如:formatNum(100.12345678,4)
function formatNum(Num1,Num2)
if(isNaN(Num1)||isNaN(Num2))
return(0);
else
Num1=Num1.toString();
Num2=parseInt(Num2);
if(Num1.indexOf(\'.\')==-1)
return(Num1);
else
var b=Num1.substring(0,Num1.indexOf(\'.\')+Num2+1);
var c=Num1.substring(Num1.indexOf(\'.\')+Num2+1,Num1.indexOf(\'.\')+Num2+2);
if(c=="")
return(b);
else
if(parseInt(c)<5)
return(b);
else
return((Math.round(parseFloat(b)*Math.pow(10,Num2))+Math.round(parseFloat(Math.pow(0.1,Num2).toString().substring(0,Math.pow(0.1,Num2).toString().indexOf(\'.\')+Num2+1))*Math.pow(10,Num2)))/Math.pow(10,Num2));






Jquery方法:

function getStrActualLen()
var count=$("#sChars").val().length/1024;

return Math.round(count*Math.pow(10,4));

参考技术A //srcStr 要处理的数字
//nAfterDot 小数位数
function FormatNumber(srcStr,nAfterDot)

   var srcStr,nAfterDot;
   var resultStr,nTen;
   srcStr = ""+srcStr+"";
   strLen = srcStr.length;
   dotPos = srcStr.indexOf(".",0);
   if (dotPos == -1)
     resultStr = srcStr+".";
     for (i=0;i<nAfterDot;i++)
       resultStr = resultStr+"0";
    
     return resultStr;
  
   else
     if ((strLen - dotPos - 1) >= nAfterDot)
       nAfter = dotPos + nAfterDot + 1;
       nTen =1;
       for(j=0;j<nAfterDot;j++)
         nTen = nTen*10;
      
       resultStr = Math.round(parseFloat(srcStr)*nTen)/nTen;
       return resultStr;
    
     else
       resultStr = srcStr;
       for (i=0;i<(nAfterDot - strLen + dotPos + 1);i++)
         resultStr = resultStr+"0";
      
       return resultStr;
    
  

alert( FormatNumber(23.25666666666, 2) );

以上是关于如何避免jQuery四舍五入的主要内容,如果未能解决你的问题,请参考以下文章

jquery中对小数进行取整四舍五入的方法

angular js中怎样四舍五入

jquery中对小数进行取整

jquery中对小数进行取整

vue前端表格展示number类型太长数值四舍五入为啥

向上取整_向下取整_四舍五入