js数字format转换代码,带千,万,百万单位

所谓带单位,就是实现1000->1千,259999->25万,10020002->1千万类似这样的处理

在介绍format的snippet之前,先来介绍一个很好用的库(虽然并没有什么关系), numeral.js, 有很多format的功能,譬如百分比转换,货币转换,单位换算,还能unformat, 配置不同的语言转换标准,真的十分强大。

事实上,numeral.js库也提供了诸如这样的numeral(1000).format(‘0 a’) => 1 千 加单位的format功能,配置好中文语言标准即可。然而,似乎只能以3位分割,匹配到千,百万,亿这种(也许文档没看仔细),可我还想要万,千万呢,又或者自由位数分割,于是就有了下面这段代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function NumberUpperFormat(input) {
// num - 位数
// 简单理解后面要有三个0,则是千,4个零,则是万。当然不一定是零,位数到了就行,反正都会省略掉(未做四舍五入)
// 可以随意的增删改units内容实现单位的配置
const units = [
{num: 3, unit: '千'},
{num: 4, unit: '万'},
{num: 6, unit: '百万'},
{num: 7, unit: '千万'},
{num: 8, unit: '亿'}
];
// 精确到整数,直接用js自带方法input.toFixed(0)也可以
const num = numeral(input).format('0');
if (num.length <= 3) {
// 项目相关需求,千以下不加单位
return num;
}
// 保证前面至少留一位
const len = num.length - 1;
let isFind = false;
for (let i = 0, length = units.length; i < length; i++) {
let item = units[i];
if (len >= item.num && len < units[i + 1].num) {
isFind = true;
} else if (i === (length - 2)) {
isFind = true;
item = units[++i];
}
if (isFind) {
// 确认区间后,返回前几位加上单位
return `${num.slice(0, num.length - item.num)}${item.unit}`;
}
}
}

这段代码还有些坚固性等方面的问题,欢迎补充!

文章目录
,