IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 数字加千分位分隔符,加货币符号,数字转百分数 -> 正文阅读

[JavaScript知识库]数字加千分位分隔符,加货币符号,数字转百分数

想必大家在做前端开发的过程中或多或少都会需要显示数字或是金钱,或是百分数,或是小数位取有效数字。Number.parseFloat(x).toFixed(2)或许可以解决取有效数字的问题,但是其他的就没辙了。尤其是js的浮点数计算不精确导致在前端计算合适麻烦,还需要引用第三方库来解决,最后导致怕麻烦的童鞋有时候就直接叫后端直接传计算后的值^ _ ^ |||,其实官方已经提供了api去解决类似问题了,而且还是一起解决的,接下来抛转引玉大家一起来学习一下这个api,Intl !!!
去看Intl详情请戳

Intl 对象是 ECMAScript 国际化 API 的一个命名空间,它提供了精确的字符串对比、数字格式化,和日期时间格式化。Collator,NumberFormat 和 DateTimeFormat 对象的构造函数是 Intl 对象的属性。本页文档内容包括了这些属性,以及国际化使用的构造器和其他语言的方法等常见的功能。

我自己封装了一个方法去处理以上这些问题,当然,只是初略封装,感兴趣的童鞋可以继续封装。话不多说,直接上代码!

/**
 * 
 * @param  value :数字/数字字符串
 * @param  config :
 * config = {
      locales: 'zh-CN',
      currency: 'CNY', 是否显示币种前缀,默认不显示 
      注:currency如果有值,需和locale对应
      fractionDigits: 2, 显示多少位小数,默认2位小数
      useGrouping: false, 千分位逗号分隔 true/false ,默认true
      percent: 2 显示百分号和最高几位小数
    }
 * @returns string 格式化后的数字
 */
function parseNumber (value, config) {
  if (isNaN(value)) return '???'
  if ([null, undefined, '',].includes(value)) return '-' // 没有值时返回‘-’
  if (value == 0) return '0' // 对于0,0.0000,-0.000...这些直接返回0不保留小数位
  let locales = undefined
  let options = {}
  // 1. 如果有配置,使用配置
  if (config) {
    if (Reflect.has(config, 'locales')) {
      locales = config.locales
    }
    // 1.2 千分位逗号分隔
    if (Reflect.has(config, 'useGrouping')) {
      options.useGrouping = config.useGrouping
    }
    // 1.3 加币种前缀
    if (Reflect.has(config, 'currency')) {
      options.style = 'currency'
      options.currency = config.currency
    }
    // 1.4 是否有小数位,显示多少位小数
    if (Reflect.has(config, 'fractionDigits')) {
      options.minimumFractionDigits = config.fractionDigits
      options.maximumFractionDigits = config.fractionDigits
    }
    // 1.5 设置为百分数格式
    if (Reflect.has(config, 'percent')) {
      options.style = 'percent'
      options.maximumFractionDigits = config.percent
    }
  } else {
    // 2. 没有配置使用默认配置,对金钱默认处理为"1,234,567.89";
    locales = 'zh-CN'
    options.minimumFractionDigits = 2
    options.maximumFractionDigits = 2
  }
  const nf = new Intl.NumberFormat(locales, options)
  return nf.format(value)
}

// 以下是测试数据,可删除
const test = [null, undefined, '', {}, 'aa', '111aaa', [],
  0, 0.0, 0.0000, -0.0,
  '0', '0.0', '0.000', '-0.0',
]
test.forEach(item => console.log(parseMoney(item)))
// 以上是测试数据,可删除

简单说明一下:

  1. 传值不是数字或数字字符串时,返回‘???’
  2. 对于==0 的数字,咱没必要再显示小数位或是百分号了,直接返回 0
  3. 传参value不仅仅只是一个数字,也可以是0.1+0.2这种表达式,把前端计算交给Intl去处理,在js中0.1+0.2 =0.30000000000000004的情况,在Intl中不会出现,放心使用!
  4. 具体的使用方法在代码中都有注释,我就不过多废话了!
    有问题的小伙伴欢迎留言,评论,点赞关注,谢啦!!!

谁能仅靠十年寒窗苦读,去经营百岁人生?
活到老,学到老!
知识改变人生!
共勉!

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:20:07  更:2022-02-28 15:22:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:46:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码