千位分隔符在大数字的应用

907 阅读2分钟

这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战

前言

在移动设备中,连续数值超过一定位数,浏览器可能会默认当做电话号码处理,但是有时候这一长串的连续数值其实就是一个数字类型。依西方的习惯以及现实常见的场景中,人们在数字中加进一个符号,以免因数字位数太多而难以看出它的值,通常每隔三位数加进一个逗号。

为什么是隔三位?

在英语里是没有“万”“亿”的,只有“百万(million)”“十亿(billion)”

1,000 一千

1,000,000 一百万

1,000,000,000 十亿

千位分隔符就是这么产生的

千位分隔符的作用

语义化更好

在软件和设备上,只要以千位分隔符表示的,就一定认为是数值 看数字 1508927009,总得要找位数才能读出来!但是如果是数字 1,508,927,009 呢?也要找位数,但是看的比较轻松,熟络的话,一眼就可以看出多少位了

数值转换成千位分隔数值

想要在页面上显示为逗号分隔的数值,需要进一步的转化和处理

1. 遍历处理(不推荐:处理繁杂)

<script>
    var num = 1234567890
    var arr = num.toString().split('').reverse() // 将数值转成字符串,分割成数组,再反转顺序
    var newNum = ''
    arr.forEach((item, index) => {
        newNum += item
        if ((index + 1) % 3 === 0) {
            newNum += ','
        }
    });
    newNum = newNum.split('').reverse().join('')
    console.log(newNum)
</script>

2. 正则表达式处理

<script>
    var num = 1234567890
    var newNum = num.toString().replace(/(\d)(?=(\d{3})+$)/g, "$1,");
    console.log(newNum)
</script>

2. toLocaleString() 处理

toLocaleString([locales [, options])  方法返回这个数字在特定语言环境下的表示字符串。

locales: 可选,缩写语言代码,例如:cmn-Hans-CN

options: 可选,包含一些或所有的属性的类

<script>
    var num = 1234567890
    var newNum = num.toLocaleString('en-US');
    console.log(newNum)
</script>

image.png

千位分隔符的千变万化

有些字体的这个逗号长得不那么好看一点,设计师希望这个逗号啊有点像蝌蚪的感觉,但是数字呢还是原来的字体,怎么办?

image.png

只对某些字体进行控制是使用CSS中的 unicode-range 属性

unicode-range

<style>
    @font-face {
        font-family: BASE;
        src: local('PingFang SC'),
            local("Microsoft Yahei");
    }
    @font-face {
        font-family: quote;
        src: local('SimSun');    
        unicode-range: u+002c;
    }
    body {
        font-size: 20px;
        font-family: BASE;
    }
    .font {
        font-family: quote, BASE;
    }
</style>
<div class="num font">1,234,567,890</div>
<div class="num">1,234,567,890</div>

image.png

image.png

整体而言,unicode-range 兼容性还是很不错的

参考文章

请使用千位分隔符(逗号)表示web网页中的大数字

CSS unicode-range特定字符使用font-face自定义字体

(求关注)

欢迎关注我的公众号:A纲 Coder,获得日常干货推送。最后再次感谢您的阅读,我是程序猿憨憨