引入

今天在跟小伙伴讨论如何将一个数字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()的区别

  1. MDN的解释:

    1. toString()方法返回指定 Number 对象的字符串表示形式

      • 语法:numObj.toString([radix])
      • 参数:radix指定要用于数字到字符串的转换的基数(从2到36)。如果未指定 radix 参数,则默认值为 10。如果 toString()radix 参数不在 2 到 36 之间,将会抛出一个 RangeError
    2. toLocaleString()方法返回这个数字在特定语言环境下的表示字符串
      • 语法:numObj.toLocaleString([locales [, options]]) 参数的具体含义参看MDN.
      • 不指定参数的情况:在没有指定区域的基本使用时,返回使用默认的语言环境和默认选项格式化的字符串。比如:
        var number = 3500;
        console.log(number.toLocaleString()); // Displays "3,500" if in U.S. English locale
        
  2. 数字转字符串的具体案例
    少于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位用逗号隔开。
    
  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
    

总结

  1. 学习了两种数字转金额的思路:从后往前插入逗号;使用toLocalString()。
  2. toString()与toLocaleString()的两个主要区别: 数字上和时间格式上,具体见上面分析。

关于toString()与toLocaleString()的区别相关推荐

  1. 数组转换成字符串 join、toString、toLocaleString

    在进行JS编程时,我们有时会需要把一个数组转换成字符串.这时,我们就会用到javascript的几个数组转换成字符串的函数.JS有3个数组转字符串函数.一起来看看吧. 一:join()函数 join函 ...

  2. String String.valueof() toString三者之间的区别~

    String  String.valueof()  toString三者之间的区别~ (String )强制类型转换,使用这种方法时,需要注意的是类型必须能转成String类型.因此最好用instan ...

  3. Java 异常中 e.getMessage() 和 e.toString() e.printStackTrace()的区别常见的几种异常

    Java 异常中 e.getMessage() 和 e.toString() e.printStackTrace()的区别 一.概述 在java异常体系中,要打印异常信息,可以通过:e.getMess ...

  4. js中函数对象的方法,原型方法apply、call、bind、toString、toLocaleString、valueOf

    全栈工程师开发手册 (作者:栾鹏) js系列教程4-函数.函数参数教程全解 js中函数也是一种对象,因此有自己的原型对象,可以作为其他对象的属性,也可以作为其他函数的参数. 函数方法 [apply() ...

  5. 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.....); ...

  6. 搞懂toString()与valueOf()的区别

    一.toString() 作用:toString()方法返回一个表示改对象的字符串,如果是对象会返回,toString() 返回 "[object type]",其中type是对象 ...

  7. java 中parse_Java中parse()和valueOf(),toString()的区别?

    参考答案如下 王红本月购买福利彩票中奖100万元,区别下列说法正确的是() 区别哲学就是世界观. (2.0分) 区别-You haven't said a word about my new coat ...

  8. java parseint(12.0),Java中parseInt()和valueOf(),toString()的区别

    1.parseInt()就是把 String 类型转化为 int 类型. 如 String a= "123"; int b = Integer.parseInt(a); 这样 b ...

  9. 转载comboBox1.SelectedItem.ToString()与 comboBox1.Text 区别

    comboBox1.Text  是框里面 显示的 文本 comboBox1.SelectedItem.ToString() 是 选择的文本 区别是 有时候 可以 不选择,自己 直接 输入.  所以 用 ...

最新文章

  1. 防止办公用计算机,关于加强办公室计算机使用管理的规定
  2. 对网络体系变革的思考
  3. javaweb数据库操作
  4. 开放网络的承诺:它真的做到了吗?
  5. [js] 一个api接口从请求数据到请求结束共与服务器进行了几次交互?
  6. 查看及修改MYSQL最大连接数
  7. LCD显示屏原理与应用
  8. python日志统计_python试用-日志统计
  9. SQL SERVER “扩展属性的应用
  10. 十字路口待转区什么用_都知道“左转待转区”,但到底该怎么走?老司机给你一次讲清楚...
  11. 如何使用ISO升级TrueNAS主要版本
  12. 什么是App加壳,以及App加壳的利与弊
  13. 【深度强化学习】A3C
  14. 水清冷冷:PS 2021 (Adobe Photoshop 2021) 安装教程和学习方法(附工具)
  15. 【渝粤题库】陕西师范大学200391 初等几何研究 作业(专升本)
  16. vs2005 应用程序正常初始化失败的解决方案
  17. python星星闪烁_python实现while循环打印星星的四种形状
  18. csgo 机器人模式_csgo怎么单机跟电脑打只有每队5人,怎么增加BOT
  19. 计算机图形学 实验6 直线的裁剪—Cohen Sutherland裁剪算法(MFC中)
  20. 灾难恢复之什么是RTORPO?

热门文章

  1. JavaScript之arguments属性
  2. Enterprise Vault 2007 Series [PST Migration]
  3. 微软在动态语言支持上超越了Java?
  4. CentOS 7 odoo12 部署
  5. Centos7使用Docker创建Oracle11g
  6. Java中gatSum方法是什么_Oracle中的SUM用法讲解
  7. 设计模式 - 七大设计原则(一)
  8. sysv-rc-conf --- Linux设置开机自动启动
  9. 【生活】我的2019年度总结
  10. 【C语言】用C语言输出一个吃豆人