JavaScript之保留小数点备忘录

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

      在实现中,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. }   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值