找出一串数字中的最大小数位数
Find out the maximum number of decimal places within a string of numbers
字符串看起来类似于 3*2.2
或 6+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)
您可以执行以下操作:
Array.prototype.split()
your input string by RegExp /\[^\d.\]+/
提取数字
- 遍历带有
Array.prototype.map()
的结果数组,并通过小数分隔符将它们拆分为 whole
和 fractional
部分,返回小数部分的 length
或 0 (对于整数)
- 使用
Math.max()
求最大值length
上述方法似乎更可靠,因为它不涉及某些不受支持的功能:
- RegExp 后视断言 (
/(?<=)/
) may not be supported 某些流行的浏览器,如 Safari 或 Firefox(低于当前版本)
- 最新功能,例如 conditional chaining (
.?
) or nulish coalescing (??
)
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%;}
字符串看起来类似于 3*2.2
或 6+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)
您可以执行以下操作:
Array.prototype.split()
your input string by RegExp/\[^\d.\]+/
提取数字- 遍历带有
Array.prototype.map()
的结果数组,并通过小数分隔符将它们拆分为whole
和fractional
部分,返回小数部分的length
或 0 (对于整数) - 使用
Math.max()
求最大值length
上述方法似乎更可靠,因为它不涉及某些不受支持的功能:
- RegExp 后视断言 (
/(?<=)/
) may not be supported 某些流行的浏览器,如 Safari 或 Firefox(低于当前版本) - 最新功能,例如 conditional chaining (
.?
) or nulish coalescing (??
)
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%;}