第 143 题:将 10000000000 形式的字符串,以每 3 位进行分隔展示 10.000.000.000 多种实现方式
千分位(thousands),数学领域术语,一种简化数学表达的方式。小数部分从小数点算起,右边第三位叫做千分位,也可以叫做小数第三位。如:3.754 中的 4 就在千分位。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(48)
str.replace(/d(?=(d{3})+$)/g, '$&.');
有没有考虑到1刚好可以除尽的情况, 就会 .100.000.000.00
哪位大神能帮忙解释一下第一种方法为什么有两个点..
因为数字后面接第一个
.
是会被认为是小数点的,所以就变成了10000000.
之后连接一个toLocaleString('de-DE')
,接第二个点才被认为是对这个数字字面量进行操作。应该是酸你想得出来自己想不出来所以就踩了哈哈
'10000000'.replace(/(?!^)(?=(d{3})+$)/g, '.')
Number('1000000000').toLocaleString().replace(/,/g, '.')
不会正则就用粗旷的方式吧
'100000000'会输出'.100.000.000'
还需要加个判断 i % 3 === 2&&i!==(arr.length-1) ? init.push(ele, '.') : init.push(ele);
let reg = /(?!^)(?=(d{3})+$)/g
'10000000000'.replace(reg, ',')
Number(100000000000).toLocaleString('de-DE')
笑死我了,运行过吗?
有点问题
'100000000'.split("").reverse().reduce((prev, cur, index) => (index + 1) % 3 == 0 ? '.' + cur + prev : cur + prev)
=> //".100.000.000"
考虑符号和小数位,用的笨办法
'10000000000'
.split('')
.reverse()
.join('')
.replace(/(d{3})/g,'$1.')
.split('')
.reverse()
.join('')
Number('100000000').toLocaleString()
可以这么写
"1000000000000".split("").reverse().reduce((prev, next, index) => {
if(index > 0 && index % 3 == 0) {
return next = next + '.' + prev
} else {
return next + prev
}
}, '')
const fond07 = (str) => {
let defaultStr = ''
if (str !== null && str !== '' && str !== undefined) {
defaultStr = str.replace(/(d)(?=(d{3})+b)/g, '$1.')
}
return defaultStr
}
考虑数字是三的倍数情况
'-1019234801211.2142345678'.replace(/(?<!...)(d)(?=(d{3})+($|.))/g, '$1,')
var str= '10000000000';
new Intl.NumberFormat().format(str);
// "10,000,000,000"
'10000000000'.replace(/(?!^)(?=(d{3})+$)/g,'.')
str.split("").reverse().reduce((prev, cur, index) => (index + 1) % 3 == 0 ? '.' + cur + prev : cur + prev) 上面没有考虑索引+1正好等于长度的时候. 此题str多加一个字符串就会有问题
如果主要想考数字的千位分隔符表示法,可以使用正则
var str= '10000000000';
var reg=/(?!^)(?=(d{3})+$)/g;
str.replace(reg, '.') // "10.000.000.000"
类似金额的转化,这里相对还要简单一些
'10000000000'.replace(/(?!^)(?=(d{3})+$)/g, '.');
(?!^)的目的是不匹配开头,虽然这里刚好不会匹配到开头;
但是可以不增加(?!^)试试字符串'100000000000'
笨方法
应该是考金额的转换吧,考虑到小数点的情况,如下:
'10000000000.0000'.replace(/d{1,3}(?=(d{3})+(.d*)?$)/g, '$&,')
var myNum = Number('10000000000'); //字符串转数字后就可以使用toLocaleString()啦~
var num2Str = myNum .toLocaleString(); //"10,000,000,000"
num2Str.replace(/,/g, "."); //"10.000.000.000"
哭了,这么好的方法竟然这么多人踩
如果一行写不出来,我选择不写
var str = '10000000000';
var arr = [];
for(var i=0; i<Math.round(a.length/3); i++){
arr.push(str.substring(str.length-3*(i+1), str.length-i*3));
}
arr.reverse();
arr.join('.')