js保留两位小数方法总结

简介: js保留两位小数方法总结  最近在做结算系统,经常需要用到金额保留两位小数,刚开始我一直用的是Angular中的过滤器number |2,但是,这无法满足我的需求。问题是,当用户离开文本框时,我需要将用户输入的内容转换成保留两位小数的格式,我想了好久,没有想出来,然后我试了toFined()方法,这个方法也不可行,因为它将数据转换成了字符串,传给后台是错的。

js保留两位小数方法总结

  最近在做结算系统,经常需要用到金额保留两位小数,刚开始我一直用的是Angular中的过滤器number |2,但是,这无法满足我的需求。问题是,当用户离开文本框时,我需要将用户输入的内容转换成保留两位小数的格式,我想了好久,没有想出来,然后我试了toFined()方法,这个方法也不可行,因为它将数据转换成了字符串,传给后台是错的。然后,我就找了其他方法。现在刚好有空,所以就把相关保留两位小数的方法总结了一下,不同的场景用不同的方法,即用即取。

一、四舍五入相关

1、toFixed()方法

需注意,保留两位小数,将数值类型的数据改变成了字符串类型

1 // 1.四舍五入
2         var num =2.446242342;  
3         num = num.toFixed(2); 
4         console.log(num); //2.45
5         console.log(typeof num); // string

2、Math.floor(),不四舍五入 ,向下取整

注意,不改变数据类型

1 // 2.不四舍五入 向下取整
2         num = Math.floor(num * 100) / 100;
3         console.log(num); //2.44
4         console.log(typeof num); // number

3、字符串匹配

注意,先将数据转换为字符串,最后再转为数值类型

1 // 3.不四舍五入 字符串匹配再转换
2         num = Number(num.toString().match(/^\d+(?:\.\d{0,2})?/));
3         console.log(num); //2.44
4         console.log(typeof num); // number

4、四舍五入保留2位小数(若第二位小数为0,则保留一位小数)

注意,数据类型不变

 1 //4.四舍五入保留2位小数(若第二位小数为0,则保留一位小数)  
 2         function keepTwoDecimal(num) {  
 3              var result = parseFloat(num);  
 4              if (isNaN(result)) {  
 5                  alert('传递参数错误,请检查!');  
 6                  return false;  
 7              }  
 8              result = Math.round(num * 100) / 100;  
 9              return result;  
10         };
11          keepTwoDecimal(num);
12          console.log(num); //2.44
13          console.log(typeof num); //number

5、四舍五入保留2位小数(不够位数,则用0替补)

注意,数据类型变为字符串类型

 1 //5.四舍五入保留2位小数(不够位数,则用0替补)  
 2         function keepTwoDecimalFull(num) {  
 3              var result = parseFloat(num);  
 4              if (isNaN(result)) {  
 5                  alert('传递参数错误,请检查!');  
 6                  return false;  
 7              }  
 8              result = Math.round(num * 100) / 100;  
 9              var s_x = result.toString(); //将数字转换为字符串
10              
11              var pos_decimal = s_x.indexOf('.'); //小数点的索引值
12              
13 
14              // 当整数时,pos_decimal=-1 自动补0  
15              if (pos_decimal < 0) {  
16                  pos_decimal = s_x.length;  
17                  s_x += '.';  
18              }
19 
20              // 当数字的长度< 小数点索引+2时,补0  
21              while (s_x.length <= pos_decimal + 2) {  
22                  s_x += '0';  
23              }  
24              return s_x;  
25         }  
26 
27          console.log(keepTwoDecimalFull(120.5)); //120.50
28          console.log(typeof keepTwoDecimalFull(120.5)); //string
29          console.log(keepTwoDecimalFull(2.446242342)); //2.45
30          console.log(typeof keepTwoDecimalFull(2.446242342)); //string

二、浮点数保留两位小数

1、将浮点数四舍五入,取小数点后2位 

注意,数据类型不变

 1 //浮点数保留两位小数   
 2           //1.功能:将浮点数四舍五入,取小数点后2位   
 3           function toDecimal(x) {   
 4            var f = parseFloat(x);   
 5            if (isNaN(f)) {   
 6             return;   
 7            }   
 8            f = Math.round(x*100)/100;   
 9            return f;   
10           }   
11           console.log(toDecimal(3.1465926)); // 3.15
12           console.log(typeof toDecimal(3.1415926)); //number

2、强制保留2位小数,如:2,会在2后面补上00.即2.00  

注意,数据类型变为字符串类型

 1 //2.强制保留2位小数,如:2,会在2后面补上00.即2.00   
 2           function toDecimal2(x) {   
 3            var f = parseFloat(x);   
 4            if (isNaN(f)) {   
 5             return false;   
 6            }   
 7            var f = Math.round(x*100)/100;   
 8            var s = f.toString();   
 9            var rs = s.indexOf('.');   
10            if (rs < 0) {   
11             rs = s.length;   
12             s += '.';   
13            }   
14            while (s.length <= rs + 2) {   
15             s += '0';   
16            }   
17            return s;   
18           }   
19           console.log(toDecimal2(3.1)); // 3.10
20           console.log(typeof toDecimal2(3.1415926)); //string

3、保留两位小数 浮点数四舍五入 位数不够 不补0

注意,数据类型不变

1 // 3.保留两位小数 浮点数四舍五入 位数不够 不补0
2           function fomatFloat(src,pos){    
3             return Math.round(src*Math.pow(10, pos))/Math.pow(10, pos);    
4           } 
5            console.log(fomatFloat(3.12645,2)); // 3.13
6           console.log(typeof fomatFloat(3.1415926)); //number

 

以上就是常用的js保留两位小数的方法,希望对大家有帮助!

不要让梦想变成空想,行动起来!

 

相关文章
|
9月前
|
监控 负载均衡 JavaScript
有哪些有效的方法可以优化Node.js应用的性能?
有哪些有效的方法可以优化Node.js应用的性能?
466 69
|
8月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法详解
本指南详细介绍在Linux系统中安装和管理Node.js的步骤。首先检查现有环境,包括查看当前版本和清除旧版本;接着通过NodeSource仓库安装最新版Node.js并验证安装结果。推荐使用nvm(Node Version Manager)进行多版本管理,便于切换和设置默认版本。同时,提供常见问题解决方法,如权限错误处理和全局模块迁移方案,以及版本回滚操作,确保用户能够灵活应对不同需求。
798 0
|
8月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法
Debian 11更新Node.js主要就是这三种方式,无论你是初涉其中的新手还是找寻挑战的专家,总有一种方式能满足你的需求。现在,你已经是这个
927 80
|
5月前
|
JavaScript 前端开发
js小数运算出现的问题(精度丢失)及解决办法-亲测有效
JavaScript浮点数运算存在精度丢失问题,如0.1+0.2不等于0.3。原因是十进制小数转二进制时可能出现无限循环,导致舍入误差。本文提供一种精度处理方法,通过将小数转为整数运算后再还原,实现加减乘除的精确计算,解决常见浮点运算误差问题。
976 0
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
419 1
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
1008 159
|
10月前
|
JavaScript 前端开发 Java
js 垃圾回收机制的方法
JS回收机制方法讲解
|
11月前
|
JavaScript 前端开发 Java
深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解
Array.find() 是 JavaScript 数组方法中一个非常实用和强大的工具。它不仅提供了简洁的查找操作,还具有性能上的独特优势:返回的引用能够直接影响原数组的数据内容,使得数据更新更加高效。通过各种场景的展示,我们可以看到 Array.find() 在更新、条件查找和嵌套结构查找等场景中的广泛应用。 在实际开发中,掌握 Array.find() 的特性和使用技巧,可以让代码更加简洁高效,特别是在需要直接修改原数据内容的情形。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一