注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

JavaScript之保留小数点备忘录  

2012-10-13 13:50:30|  分类: JS |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

      在项目开发过程中,因为对应的行业不同,对于财务小数和数量的准确度不同,对与保留的小数也有很高的要求,在这里我汇总了一下网上的一些实现方式,并通过真实的项目验证,在这里作为备份,以备以后查找方便。

      在实现中,javascript保留小数存在两种不同的方法,

      一种是在原来数的基础保留小数,不够小数,补零处理。例如:0.56,保留三位小数,会自动加零变成 0.560,这种实现在实际的项目中对于财务数据是非常重要的。

      另一种做法就是在原来数的基础上保留小数,对于不够小数,不进行处理。例如:0.56,保留三位小数,最后还是0.56。

在这两种实现中,需要根据实际的项目需要进行选择。下面我只列出针对上诉两种做法的一种实现。可能会有其它的实现方式,如果你有,可以分享出来。

 

第一种:补零处理方式

 

Js代码 
  1. function roundNumber(number,decimals) {    
  2.     var newString;// The new rounded number    
  3.     decimals = Number(decimals);    
  4.     if (decimals < 1) {    
  5.         newString = (Math.round(number)).toString();    
  6.     } else {    
  7.         var numString = number.toString();    
  8.         if (numString.lastIndexOf(".") == -1) {// If there is no decimal point    
  9.             numString += ".";// give it one at the end    
  10.         }    
  11.         var cutoff = numString.lastIndexOf(".") + decimals;// The point at which to truncate the number    
  12.         var d1 = Number(numString.substring(cutoff,cutoff+1));// The value of the last decimal place that we'll end up with    
  13.         var d2 = Number(numString.substring(cutoff+1,cutoff+2));// The next decimal, after the last one we want    
  14.         if (d2 >= 5) {// Do we need to round up at all? If not, the string will just be truncated    
  15.             if (d1 == 9 && cutoff > 0) {// If the last digit is 9, find a new cutoff point    
  16.                 while (cutoff > 0 && (d1 == 9 || isNaN(d1))) {    
  17.                     if (d1 != ".") {    
  18.                         cutoff -= 1;    
  19.                         d1 = Number(numString.substring(cutoff,cutoff+1));    
  20.                     } else {    
  21.                         cutoff -= 1;    
  22.                     }    
  23.                 }    
  24.             }    
  25.             d1 += 1;    
  26.         }     
  27.         if (d1 == 10) {    
  28.             numString = numString.substring(0, numString.lastIndexOf("."));    
  29.             var roundedNum = Number(numString) + 1;    
  30.             newString = roundedNum.toString() + '.';    
  31.         } else {    
  32.             newString = numString.substring(0,cutoff) + d1.toString();    
  33.         }    
  34.     }    
  35.     if (newString.lastIndexOf(".") == -1) {// Do this again, to the new string    
  36.         newString += ".";    
  37.     }    
  38.     var decs = (newString.substring(newString.lastIndexOf(".")+1)).length;    
  39.     for(var i=0;i<decimals-decs;i++) newString += "0";    
  40.     //var newNumber = Number(newString);// make it a number if you like    
  41.     return newString;  
  42. }    
 

 

 

第二种:不补零的处理

 

Js代码 
  1. function roundNumber(number,fractionDigits){    
  2.    with(Math){     
  3.        return round(number*pow(10,fractionDigits))/pow(10,fractionDigits);      
  4.    }      
  5. }   
 
  评论这张
 
阅读(278)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016