关于toString()与toLocaleString()的区别
引入
今天在跟小伙伴讨论如何将一个数字num=123123123转换成金额对应的格式123,123,123的时候,学会了两种思路,先记录一下:
我写的代码这样的:(把函数写死了,很挫,只能实现当前的要求,,,)
function addD(num) {var sp = num.toString().split("");for (var i = 0; i < sp.length; i++) {if (sp[i]== '3') {sp.splice(++i,0,',');}}ss = sp.join("");ss = ss.substring(0,ss.length-1);return ss;
}var ss = addD(123123123);
console.log(ss);
学到的第一个思路:从后往前,每隔3位插入一个逗号。
function money(num) { var str = num.toString().split(''); // 将数字转换成单个的字符数组const length = str.length;for (let i = length-1; i >= 1; i--) { // 从后往前,每隔3位插入一个逗号if ((length - i) % 3 == 0) {str.splice(i, 0, ',');}}str = str.join('');return str;
}
console.log(money(123123123));
学到的第二个思路:使用正则表达式
function money(num) {return num && num.toString().replace(/(?!^)(?=(\d{3})+\.)/g, ',');
}console.log(money(123123123.12));
function toMoney(num) {return num && num.toString().replace(/(\d)(?=(\d{3})+\.)/g, function ($1, $2) {return $2 + ',';});
}
console.log(toMoney(123123123.12)); // 123,123,123.12
学到的第三个思路:
function toMoney(num) {num = num.toFixed(2); //将数字转成带有2位小数的字符串,银行家算法,四舍六入五成双,会有小问题,Chrome不遵循,在这里表示精确到2位,看第3位,第5位是5,5的后面还有数就往前进1,没有的话直接舍去,涉及到金额的最好别用。num = parseFloat(num); //将带有2位小数的字符串转成带有小数的数字num = num.toLocaleString(); //将带有2位小数的数字转成金额格式return num; //返回的是字符串23,245.12保留2位小数
}let num1 = 5262456.2158;
let num1 = 5262456.215;
console.log(toMoney(num1)); // 5,262,456.22
console.log(toMoney(num2)); // 5,262,456.21
在这个代码里面发现toMoney
函数里面的num.toLocaleString()
可以直接将有2位小数的数字转换成金额的格式,这不就是可以直接实现上面那个题目的要求吗。平常基本上只用toString()
方法,没怎么用过toLocaleString()
。这两个的区别是什么?就去MDN了。
toString()与toLocaleString()的区别
MDN的解释:
toString()
方法返回指定 Number 对象的字符串表示形式- 语法:
numObj.toString([radix])
- 参数:
radix
指定要用于数字到字符串的转换的基数(从2到36)。如果未指定 radix 参数,则默认值为 10。如果toString()
的radix
参数不在 2 到 36 之间,将会抛出一个RangeError
。
- 语法:
toLocaleString()
方法返回这个数字在特定语言环境下的表示字符串- 语法:
numObj.toLocaleString([locales [, options]])
参数的具体含义参看MDN. - 不指定参数的情况:在没有指定区域的基本使用时,返回使用默认的语言环境和默认选项格式化的字符串。比如:
var number = 3500; console.log(number.toLocaleString()); // Displays "3,500" if in U.S. English locale
- 语法:
数字转字符串的具体案例
少于3位的整数:var a = 300;console.log(a.toString()); // "300" console.log(a.toLocaleString()); //"300" 没有区别
少于3位的小数:
var a = 3.01;console.log(a.toString()); // "3.01" console.log(a.toLocaleString()); //"3.01" 没有区别
多于3位的整数
var a = 300000;console.log(a.toString()); // "300000" console.log(a.toLocaleString()); //"300,000" 每3位隔开
多于3位的小数
var a = 300000.3454;console.log(a.toString()); // "300000.3454" console.log(a.toLocaleString()); //"300,000.345" var a = 300000.3455;console.log(a.toString()); // "300000.3455" console.log(a.toLocaleString()); //"300,000.346" 四舍五入保留3位小数,整数部分每隔3位用逗号隔开。var a = 300000.3455321;console.log(a.toString()); // "300000.3455321" console.log(a.toLocaleString()); //"300,000.346" 四舍五入保留3位小数,整数部分每隔3位用逗号隔开。
在转换时间格式上的区别
var d = new Date() console.log(d); // 2020-03-13T01:27:13.465Z console.log(d.toString()); // Fri Mar 13 2020 09:27:13 GMT+0800 (中国标准时间) console.log(d.toLocaleString()); // 2020/3/13 上午9:27:13
总结
- 学习了两种数字转金额的思路:从后往前插入逗号;使用toLocalString()。
- toString()与toLocaleString()的两个主要区别: 数字上和时间格式上,具体见上面分析。
关于toString()与toLocaleString()的区别相关推荐
- 数组转换成字符串 join、toString、toLocaleString
在进行JS编程时,我们有时会需要把一个数组转换成字符串.这时,我们就会用到javascript的几个数组转换成字符串的函数.JS有3个数组转字符串函数.一起来看看吧. 一:join()函数 join函 ...
- String String.valueof() toString三者之间的区别~
String String.valueof() toString三者之间的区别~ (String )强制类型转换,使用这种方法时,需要注意的是类型必须能转成String类型.因此最好用instan ...
- Java 异常中 e.getMessage() 和 e.toString() e.printStackTrace()的区别常见的几种异常
Java 异常中 e.getMessage() 和 e.toString() e.printStackTrace()的区别 一.概述 在java异常体系中,要打印异常信息,可以通过:e.getMess ...
- js中函数对象的方法,原型方法apply、call、bind、toString、toLocaleString、valueOf
全栈工程师开发手册 (作者:栾鹏) js系列教程4-函数.函数参数教程全解 js中函数也是一种对象,因此有自己的原型对象,可以作为其他对象的属性,也可以作为其他函数的参数. 函数方法 [apply() ...
- js中Array对象。concat,concat,pop,push,reserve,shift,slice,splice,toString,toLocaleString,unshift
Array对象(arr代码中表示Array创建的实例对象) 创建方式: 1.new Array(); 2.new Array(size);3.new Array(eg01,eg2.eg3.....); ...
- 搞懂toString()与valueOf()的区别
一.toString() 作用:toString()方法返回一个表示改对象的字符串,如果是对象会返回,toString() 返回 "[object type]",其中type是对象 ...
- java 中parse_Java中parse()和valueOf(),toString()的区别?
参考答案如下 王红本月购买福利彩票中奖100万元,区别下列说法正确的是() 区别哲学就是世界观. (2.0分) 区别-You haven't said a word about my new coat ...
- java parseint(12.0),Java中parseInt()和valueOf(),toString()的区别
1.parseInt()就是把 String 类型转化为 int 类型. 如 String a= "123"; int b = Integer.parseInt(a); 这样 b ...
- 转载comboBox1.SelectedItem.ToString()与 comboBox1.Text 区别
comboBox1.Text 是框里面 显示的 文本 comboBox1.SelectedItem.ToString() 是 选择的文本 区别是 有时候 可以 不选择,自己 直接 输入. 所以 用 ...
最新文章
- 防止办公用计算机,关于加强办公室计算机使用管理的规定
- 对网络体系变革的思考
- javaweb数据库操作
- 开放网络的承诺:它真的做到了吗?
- [js] 一个api接口从请求数据到请求结束共与服务器进行了几次交互?
- 查看及修改MYSQL最大连接数
- LCD显示屏原理与应用
- python日志统计_python试用-日志统计
- SQL SERVER “扩展属性的应用
- 十字路口待转区什么用_都知道“左转待转区”,但到底该怎么走?老司机给你一次讲清楚...
- 如何使用ISO升级TrueNAS主要版本
- 什么是App加壳,以及App加壳的利与弊
- 【深度强化学习】A3C
- 水清冷冷:PS 2021 (Adobe Photoshop 2021) 安装教程和学习方法(附工具)
- 【渝粤题库】陕西师范大学200391 初等几何研究 作业(专升本)
- vs2005 应用程序正常初始化失败的解决方案
- python星星闪烁_python实现while循环打印星星的四种形状
- csgo 机器人模式_csgo怎么单机跟电脑打只有每队5人,怎么增加BOT
- 计算机图形学 实验6 直线的裁剪—Cohen Sutherland裁剪算法(MFC中)
- 灾难恢复之什么是RTORPO?