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

字符串看起来像3*2.2or6+3.1*3.21(1+2)*3,1+(1.22+3)or 之类的东西0.1+1+2.2423+2.1,它可能会有所不同。我必须在小数位数string最多的数字中找到小数位数。

我完全不知道该怎么做


PIPIONE
浏览 108回答 3
3回答

慕尼黑8549860

您可以使用正则表达式查找所有具有小数位的数字,然后用于Array.prototype.reduce查找小数位数最多的数字。const input = '0.1+1+2.2423+2.1';const maxNumberOfDecimalPlaces = input&nbsp; .match(/((?<=\.)\d+)/g)&nbsp; ?.reduce((acc, el) =>&nbsp; &nbsp; acc >= el.length ?&nbsp; &nbsp; acc :&nbsp; &nbsp; el.length, 0) ?? 0;console.log(maxNumberOfDecimalPlaces);0请注意,当在字符串中找不到带小数位的数字时,这将返回。

蝴蝶刀刀

您可以执行以下操作:Array.prototype.split()/\[^\d.\]+/通过 RegExp提取数字的输入字符串遍历生成的数字数组,并Array.prototype.map()用小数分隔符将它们拆分为whole和fractional部分,返回length小数部分或 0(对于整数)用于Math.max()查找最大值length上面的方法似乎更健壮,因为它不涉及某些不受支持的特性:RegExp lookbehinds assertions (&nbsp;/(?<=)/)某些流行的浏览器可能不支持,如 Safari 或 Firefox(低于当前版本)最新功能,如条件链接 (&nbsp;.?)或nulish 合并 (&nbsp;??)const src = ['3*2.2', '6+3.1*3.21', '(1+2)*3' , '1+(1.22+3)', '0.1+1+2.2423+2.1'],&nbsp; &nbsp; &nbsp; maxDecimals = s =>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Math.max(&nbsp; &nbsp; &nbsp; &nbsp; ...s&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .split(/[^\d.]+/)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map(n => {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const [whole, fract] = n.split('.')&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return fract ? fract.length : 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp;)&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;src.forEach(s => console.log(`Input: ${s}, result: ${maxDecimals(s)}`)).as-console-wrapper{min-height:100%;}

偶然的你

您可以使用正则表达式模式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 = 0console.log(res)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript