Number.prototype.toLocaleString 的兼容问题

发布于 2022-09-07 21:46:08 字数 1308 浏览 50 评论 0

在做金额格式化的时候用到了 Number.prototype.toLocaleString 这个方法,但是在一些老版本的浏览器中会出现兼容问题

var a = 10000000;
a.toLocaleString(); 
// chrome 68 "10,000,000" 
// 搜狗浏览器 7.5.5 "10,000,000.000"

搜狗 7.5.5 多了 .000
原来的格式化函数(格式化千分位且保留两位小数)

formatAmount: function (amount) { // 金额千位格式化
  if (typeof amount === 'undefined' || amount === '') return '';
  if (amount - 0 === 0) return '0.00';
  let num = amount - 0;
  let str = (num-0).toFixed(2); // 保留两位小数
  let num_int = str.split('.')[0];
  let num_point = str.split('.')[1];
  return `${(num_int-0).toLocaleString()}.${num_point}`;
}

兼容后

formatAmount: function (amount) { // 金额千位格式化
      if (typeof amount === 'undefined' || amount === '') return '';
      if (amount - 0 === 0) return '0.00';
      let num = amount - 0;
      let str = (num-0).toFixed(2); // 保留两位小时
      let num_int = (str.split('.')[0] - 0).toLocaleString();
      let num_point = str.split('.')[1];
      return `${num_int.indexOf('.')>-1?num_int.split('.')[0]:num_int}.${num_point}`;
    }

搜狗 7.5.5 的内核版本是 Chromium 49.0.2623
根据MDN显示是支持这个方法的。那这种兼容性该怎么判断?方法可以用但是返回的结果不同。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情深缘浅 2022-09-14 21:46:08
.toLocaleString(undefined,{minimumFractionDigits:0,maximumFractionDigits:0})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文