四舍六入五单双算法
2014-03-11 08:49
246 查看
规则:
⑴ 在拟舍弃的数字中若左边第一位数字小于5(不含5)时,则舍弃。
⑵ 在拟舍弃的数字中若左边第一位数字大于5(不含5)时,则进一。
⑶ 在拟舍弃的数字中若左边第一位数字等于5,其右边的数字并非全部是零时,则进一。
⑷ 在拟舍弃的数字中若左边第一位数字等于5,其右边的数字全部是零或为空时,所拟保留的末位数字若为奇数则进一,若为偶数(含0)则不进。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>round</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript"> function EffectiveNum(orignNum,n){ var loc; //标记位置,用于截取有效位的值 var returnNum; //返回值 if(orignNum.toString()=="NaN" || orignNum.toString()=="Infinity" || orignNum.toString()=="0" ){ return 0; } //console.info('==='+loc); //用小数点拆分数字;修约分小数点前部分大于0和小数点前数字小于0两种情况,此处只判断了小数点前大于0的情况 var str; str=orignNum.toString().split("."); //数字格式不正确 if(str.length<1 || str.length>2){ return 0; } else if(str.length==1){ str[1]=""; } //在拟舍弃的数字中若左边第一位数字等于5,判断奇偶时初始化变量 loc = str[0].length+parseInt(n-1); //合并数字 var uniteNum; if(parseInt(str[0])==0||parseInt(str[0])>0){ uniteNum=str[0].concat(str[1]); } //////////////////////////////////////////////////////////////////////////////////////////// //小数点前部分大于0 //////////////////////////////////////////////////////////////////////////////////////////// if(parseInt(str[0])>0||parseInt(str[0])==0){ //参数说明 mender:拟舍弃的数字中若左边第一位数字 var mender=str[0].length+parseInt(n); //拟舍弃数字的最左一位数字大于5或者小于5 if(uniteNum.charAt(mender)>5 || uniteNum.charAt(mender)<5){ returnNum=(parseFloat(orignNum)).toFixed(n); }else if(uniteNum.charAt(mender)==5){ //拟舍弃的数字中左边第二位数字开始截取 var needCal = mender+1; var vary = parseInt(uniteNum.substring(needCal)); //5后面一定是数值 if(!isNaN(vary)&&vary!=0){ returnNum=(parseFloat(orignNum)).toFixed(n); }else{ if(uniteNum.charAt(loc)%2==0){ //判断最后的有效位为偶数时 returnNum = (uniteNum.substring(0,(loc+1)))/Math.pow(10,n); var tem = (returnNum.toString()).indexOf('.'); if(tem==-1){ returnNum = returnNum+'.0'; } }else{ //判断最后的有效位为奇数时 var i = 1/Math.pow(10,n); returnNum = uniteNum.substring(0,(loc+1))/Math.pow(10,n); //console.info('===奇数'+returnNum+'=='+i); returnNum = i+returnNum; if(n==1){ returnNum = returnNum.toFixed(1); } } } } } return returnNum; } </script> </head> <body> 原始值:<input type="text" name="" id="originalValue"> 精确度:<input type="text" name="" id="precision"> <input type="button" value="计算" onclick="setLocaiton()"> <script type="text/javascript"> function setLocaiton(){ var originalValue = document.getElementById('originalValue').value; var precision = document.getElementById('precision').value; EffectiveNum(originalValue,precision); } </script> </body> </html>
相关文章推荐
- n!的另类算法
- 嵌入式Linux平台搭建日记2014/3/7
- POJ 3061 Subsequence 二分或者尺取法
- POJ 3061 Subsequence 二分或者尺取法
- Linux 控制台聊天程序
- 安装websphere6.1,运行install时没有反应
- 常用css样式属性大全(中文注释)
- Hdu 1317 XYZZY[floyd+bellman_ford]
- Linux虚拟机与Windows物理机之间传输文件的方法
- 2014/3/4实验代码
- LinuxCast学习笔记二十七:raid_basic
- windows修改远程桌面RDP连接数
- 远方驾考(2014年7月全国通用科目一科目四理论题库)单机版
- 2014/2/28编程总结
- 【贪心法】+-字符串
- 多线程pthread 和 cpu affinity头文件问题
- 【Python】多次访问文件,指针再次指向第一行
- Linux setitimer函数测试代码2
- LIB和DLL的区别与使用
- bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序