找出一串数字中的最大小数位数

Find out the maximum number of decimal places within a string of numbers

字符串看起来类似于 3*2.26+3.1*3.21(1+2)*3,1+(1.22+3)0.1+1+2.2423+2.1 的内容,它可能会有所不同。我必须找到 string 中小数位数最多的数字中的小数位数。

我完全不知道该怎么做

您可以使用正则表达式查找所有带小数位的数字,然后使用 Array.prototype.reduce 查找小数位数最多的数字。

const input = '0.1+1+2.2423+2.1';

const maxNumberOfDecimalPlaces = input
  .match(/((?<=\.)\d+)/g)
  ?.reduce((acc, el) =>
    acc >= el.length ?
    acc :
    el.length, 0) ?? 0;

console.log(maxNumberOfDecimalPlaces);

请注意,当在字符串中找不到带小数位的数字时,这将 return 0

您可以使用正则表达式模式

var str="6+3.1*3.21"
d=str.match(/(?<=\d)[.]\d{1,}/g)
d!=null ? res=d.map((n,i) => ({["number" + (i+1) ] : n.length - 1}))
: res = 0
console.log(res)

您可以执行以下操作:

上述方法似乎更可靠,因为它不涉及某些不受支持的功能:

const src = ['3*2.2', '6+3.1*3.21', '(1+2)*3' , '1+(1.22+3)', '0.1+1+2.2423+2.1'],

      maxDecimals = s => 
       Math.max(
        ...s
          .split(/[^\d.]+/)
          .map(n => {
            const [whole, fract] = n.split('.')
            return fract ? fract.length : 0
          })
       )
      
        
src.forEach(s => console.log(`Input: ${s}, result: ${maxDecimals(s)}`))
.as-console-wrapper{min-height:100%;}