第 143 题:将 10000000000 形式的字符串,以每 3 位进行分隔展示 10.000.000.000 多种实现方式

发布于 2022-08-22 15:41:14 字数 86 浏览 138 评论 48

千分位(thousands),数学领域术语,一种简化数学表达的方式。小数部分从小数点算起,右边第三位叫做千分位,也可以叫做小数第三位。如:3.754 中的 4 就在千分位。

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

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

发布评论

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

评论(48

与酒说心事 2022-05-04 13:54:33

str.replace(/d(?=(d{3})+$)/g, '$&.');

旧竹 2022-05-04 13:54:33
"1000000000000".split('').reverse().reduce((total, each, i)=>{
        total.push(each)
        if ((i + 1) % 3 == 0) total.push('.')
        return total
}, []).reverse().join('')

有没有考虑到1刚好可以除尽的情况, 就会 .100.000.000.00

糖粟与秋泊 2022-05-04 13:54:33

如果一行写不出来,我选择不写

// 德国以 . 分割金钱, 转到德国当地格式化方案即可
10000000000..toLocaleString('de-DE') 

// 寻找字符空隙加 .
'10000000000'.replace(/B(?=(d{3})+(?!d))/g, '.')

// 寻找数字并在其后面加 . 
'10000000000'.replace(/(d)(?=(d{3})+b)/g, '$1.')

哪位大神能帮忙解释一下第一种方法为什么有两个点..

最佳男配角 2022-05-04 13:54:33

如果一行写不出来,我选择不写

// 德国以 . 分割金钱, 转到德国当地格式化方案即可
10000000000..toLocaleString('de-DE') 

// 寻找字符空隙加 .
'10000000000'.replace(/B(?=(d{3})+(?!d))/g, '.')

// 寻找数字并在其后面加 . 
'10000000000'.replace(/(d)(?=(d{3})+b)/g, '$1.')

哪位大神能帮忙解释一下第一种方法为什么有两个点..

因为数字后面接第一个.是会被认为是小数点的,所以就变成了10000000. 之后连接一个toLocaleString('de-DE'),接第二个点才被认为是对这个数字字面量进行操作。

夏雨凉 2022-05-04 13:54:33
let str = '1000000000000'

let result = [...str].reverse().map( (v, i) => {
  if (i % 3 === 0 && i !== 0) {
    return `${v}.`
  }
  return v
}).reverse().join("")
不爱素颜 2022-05-04 13:54:33

g, "."); //"10.000.000.000"

应该是酸你想得出来自己想不出来所以就踩了哈哈

呆萌少年 2022-05-04 13:54:33

'10000000'.replace(/(?!^)(?=(d{3})+$)/g, '.')

安穩 2022-05-04 13:54:33

Number('1000000000').toLocaleString().replace(/,/g, '.')

尸血腥色 2022-05-04 13:54:33

不会正则就用粗旷的方式吧

'1000000000000'.split('').reverse().map((v,i)=>{
  return i%3==2?`,${v}`:v
}).reverse().join('')
甲如呢乙后呢 2022-05-04 13:54:33
// 正则不大会...只好一步步来
  function foo(num) {
    const arr = [...num].reverse();
    const rst = arr.reduce((init, ele, i) => {
      i % 3 === 2 ? init.push(ele, '.') : init.push(ele);
      return init;
    }, []);
    return rst.reverse().join('')
  }

'100000000'会输出'.100.000.000'
还需要加个判断 i % 3 === 2&&i!==(arr.length-1) ? init.push(ele, '.') : init.push(ele);

迷雾森÷林ヴ 2022-05-04 13:54:33

let reg = /(?!^)(?=(d{3})+$)/g
'10000000000'.replace(reg, ',')

寂寞清仓 2022-05-04 13:54:33

Number(100000000000).toLocaleString('de-DE')

嘴硬脾气大 2022-05-04 13:54:33
87463297 =>"87,463,297"
    "87463297".replace(  /d{1,3}(?=(d{3})+$)/g  ,  (s)=>s+',')
        /d{1,3}(?=(d{3})+$)/g ,//找出后面跟有三个数字的,即["87", "463"],添加逗号在后面即可
            d{1,3} //1-3位数字
            (?=(d{3})+$) //?=表示后面要跟着符合(d{3})+$的, 即1个或多个(3个数字)结尾的
薄情伤 2022-05-04 13:54:33
// 从后向前遍历,每次截取三个字符,直到完成
const str = '10000000000';
const arr = [];
for (let len = str.length, i = len - 1; i >= 0; i = i - 3) {
  let start = i - 2;
  if (start < 0) start = 0;
  arr.push(str.slice(start, i + 1));
}
return arr.reverse().join('.');
伤痕我心 2022-05-04 13:54:33

'10000000000.0000'.replace(/d{1,3}(?=(d{3})+(.d*)?$)/g, '$&,')

笑死我了,运行过吗?

白芷 2022-05-04 13:54:33
str.split("").reverse().reduce((prev, cur, index) => (index + 1) % 3 == 0 ? '.' + cur + prev : cur + prev)

有点问题
'100000000'.split("").reverse().reduce((prev, cur, index) => (index + 1) % 3 == 0 ? '.' + cur + prev : cur + prev)
=> //".100.000.000"

梦萦几度 2022-05-04 13:54:33
const thousandSeparator = (num) => {
  let tstr = num.toString()
  let res = ''
  let count = 0
  for (let i = tstr.length - 1; i >= 0; i--) {
    res += tstr[i]
    ++count
    if (count % 3 === 0 && i !== 0) {
      res += '.'
    }
  }
  res = res.split('').reverse().join('')
  return res
}
网白 2022-05-04 13:54:33

考虑符号和小数位,用的笨办法

const thousands = (num) => {
  let suff;
  let pre;
  let symbol='';
  if(num){
    num = num +'';
    [pre,suff] = num.split('.')
    if(pre.length <= 3) return num;
    if(isNaN(pre.slice(0,1))){
      symbol = pre.slice(0,1);
      pre = pre.slice(1);
    }
    pre = pre.split('').reverse();
    for(let i in pre){
      if(i>1 && i%3 === 0){
        pre[i] = pre[i]+',';
      }
    }
    return symbol+pre.reverse().join('')+(suff ? ('.'+suff):'');
  }
  return num;
}
糖果控 2022-05-04 13:54:33
const regex = /(?<!^)(?=(d{3})+$)/g;
const s = '123456789';
s.replace(regex, ',');
八巷 2022-05-04 13:54:33
/**
 * @param {String} str
 * @return {String}
 */
function separate(str) {
  const arr = str.split('')
  for (let i = arr.length - 3; i > 0; i -= 3) {
    arr[i] = `.${arr[i]}`
  }
  return arr.join('')
}

const res = separate('100000000')
console.log('res: ', res)
吲‖鸣 2022-05-04 13:54:33

'10000000000'
.split('')
.reverse()
.join('')
.replace(/(d{3})/g,'$1.')
.split('')
.reverse()
.join('')

一枫情书 2022-05-04 13:54:33

Number('100000000').toLocaleString()

清醇, 2022-05-04 13:54:33
"1000000000000".split('').reverse().reduce((total, each, i)=>{
        total.push(each)
        if ((i + 1) % 3 == 0) total.push('.')
        return total
}, []).reverse().join('')

有没有考虑到1刚好可以除尽的情况, 就会 .100.000.000.00

可以这么写
"1000000000000".split("").reverse().reduce((prev, next, index) => {
if(index > 0 && index % 3 == 0) {
return next = next + '.' + prev
} else {
return next + prev
}
}, '')

◇流星雨﹏√ 2022-05-04 13:54:33
"1000000000000".split("").reverse().reduce((prev, next, index) => {
if(index > 0 && index % 3 == 0) {
return next = next + '.' + prev
} else {
return next + prev
}
}, '')
诺曦 2022-05-04 13:54:33

const fond07 = (str) => {
let defaultStr = ''
if (str !== null && str !== '' && str !== undefined) {
defaultStr = str.replace(/(d)(?=(d{3})+b)/g, '$1.')
}
return defaultStr
}

断桥再见 2022-05-04 13:54:33

考虑数字是三的倍数情况

function splitNum(str) {
    return str.replace(/(d)(?=(d{3})+$)/g, '$1.');
  }
野心澎湃 2022-05-04 13:54:33
const transStr = str => str.split('')
                       .reduceRight((result, word, index, arr) => 
                                         ((index + 1) % 3 === 0  && index !== arr.length - 1  ?  '.'  :  '' ) 
                                         + word + result)
赢得她心 2022-05-04 13:54:33
function format(str) {
  const reverse = str.toString().split('').reverse().join('');
  return reverse.replace(/(d{3})/g, '$1,').replace(/,$/g, '').split('').reverse().join('');
}
多彩岁月 2022-05-04 13:54:33

'-1019234801211.2142345678'.replace(/(?<!...)(d)(?=(d{3})+($|.))/g, '$1,')

末が日狂欢 2022-05-04 13:54:32
//  保留两位小数后添加千分位符
 getEffective = str => {
        let [int, decimal] = String(Number(str).toFixed(2)).split('.')
        let res =
          [...int]
            .reverse()
            .reduce(
              (prev, item, index) => (
                prev.push(index % 3 === 2 ? ',' + item : item), prev
              ),
              []
            )
            .reverse()
            .join('') + `.${decimal}`
        if (res[0] === ',') {
          return res.slice(1)
        }
        return res
      }
莫相离 2022-05-04 13:54:32

var str= '10000000000';
new Intl.NumberFormat().format(str);
// "10,000,000,000"

清风疏影 2022-05-04 13:54:32
"1000000000000".split('').reverse().reduce((total, each, i)=>{
        total.push(each)
        if ((i + 1) % 3 == 0) total.push('.')
        return total
}, []).reverse().join('')
娇纵 2022-05-04 13:54:32
new Intl.NumberFormat().format(100000000000).replace(/,/g, '.');
南…巷孤猫 2022-05-04 13:54:32
console.log('100000000000'.replace(/(?!^)(?=(d{3})+$)/g,','))
哀由 2022-05-04 13:54:32
const getStr=(str,splitNum=3,split=',')=>{
    return str.split('').reverse().map((v,i)=>{
            if(i&&i%splitNum==0){
                return `${v}${split}`
            }
            return v
    }).reverse().join('');
}

getStr('10000000000',3,',');
听你说爱我 2022-05-04 13:54:32
var reg = /(B)(?=(d{3})+$)/g;
console.log("1000000000".replace(reg, '.'));  // 1.000.000.000
奶气 2022-05-04 13:54:32

'10000000000'.replace(/(?!^)(?=(d{3})+$)/g,'.')

不一样的天空。 2022-05-04 13:54:32

str.split("").reverse().reduce((prev, cur, index) => (index + 1) % 3 == 0 ? '.' + cur + prev : cur + prev) 上面没有考虑索引+1正好等于长度的时候. 此题str多加一个字符串就会有问题

夏日浅笑〃 2022-05-04 13:54:21
// 正则不大会...只好一步步来
  function foo(num) {
    const arr = [...num].reverse();
    const rst = arr.reduce((init, ele, i) => {
      i % 3 === 2 ? init.push(ele, '.') : init.push(ele);
      return init;
    }, []);
    return rst.reverse().join('')
  }
太傻旳人生 2022-05-04 13:54:13
str.split("").reverse().reduce((prev, cur, index) => (index + 1) % 3 == 0 ? '.' + cur + prev : cur + prev)
风月客 2022-05-04 13:53:07

如果主要想考数字的千位分隔符表示法,可以使用正则
var str= '10000000000';
var reg=/(?!^)(?=(d{3})+$)/g;
str.replace(reg, '.') // "10.000.000.000"

-时光礼记 2022-05-04 13:53:00

类似金额的转化,这里相对还要简单一些
'10000000000'.replace(/(?!^)(?=(d{3})+$)/g, '.');
(?!^)的目的是不匹配开头,虽然这里刚好不会匹配到开头;
但是可以不增加(?!^)试试字符串'100000000000'

孤城病女 2022-05-04 13:52:01

笨方法

function addCommaIntoStringNumber(sNumber, splitNumber = 3){
  if (sNumber.length <= splitNumber) {
      return sNumber
  }
  let result = []
  let sNumberQuene = sNumber.split('')
  let index = 1
  let sNumberLength = sNumber.length
  while(sNumberLength--) {
    result.unshift(sNumberQuene.pop())
    if (index++ === splitNumber) {
        result.unshift(',')
        index = 1
    }
  }
  return result.join('')

}
就此别过 2022-05-04 13:51:55

应该是考金额的转换吧,考虑到小数点的情况,如下:
'10000000000.0000'.replace(/d{1,3}(?=(d{3})+(.d*)?$)/g, '$&,')

↙温凉少女 2022-05-04 13:51:30

var myNum = Number('10000000000'); //字符串转数字后就可以使用toLocaleString()啦~

var num2Str = myNum .toLocaleString(); //"10,000,000,000"

num2Str.replace(/,/g, "."); //"10.000.000.000"

哭了,这么好的方法竟然这么多人踩

ヅ她的身影、若隐若现 2022-05-04 08:33:08

如果一行写不出来,我选择不写

// 德国以 . 分割金钱, 转到德国当地格式化方案即可
10000000000..toLocaleString('de-DE') 

// 寻找字符空隙加 .
'10000000000'.replace(/B(?=(d{3})+(?!d))/g, '.')

// 寻找数字并在其后面加 . 
'10000000000'.replace(/(d)(?=(d{3})+b)/g, '$1.')
丿*梦醉红颜 2022-05-03 14:12:09
const splitStr = (str, point = 3, split = '.') => {
    let newStr = '';
    const reverseStr = str.split('').reverse().join('');
    for (const s in reverseStr) {
        newStr = (s !== '0' && s % point === 0) ? newStr + split + reverseStr[s] : newStr + reverseStr[s];
    }
    return newStr.split('').reverse().join('');
}
宛菡 2022-05-03 13:25:44

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('.')

~没有更多了~

关于作者

野却迷人

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

lorenzathorton8

文章 0 评论 0

Zero

文章 0 评论 0

萧瑟寒风

文章 0 评论 0

mylayout

文章 0 评论 0

tkewei

文章 0 评论 0

17818769742

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文