Regex 使用正则表达式从浮点中过滤出小数
我有一些浮点数和很多小数。我一直试图通过设置最多两个十进制数字来保持整洁 到目前为止,我使用了Regex 使用正则表达式从浮点中过滤出小数,regex,javascript,floating-point,numbers,decimal,Regex,Javascript,Floating Point,Numbers,Decimal,我有一些浮点数和很多小数。我一直试图通过设置最多两个十进制数字来保持整洁 到目前为止,我使用了toFixed(2)。只是为了保持简单 223.3284293.toFixed(2); “223.33” 我现在需要一个更复杂的解决方案。我想要任何尾随零后面的最后两个数字 例如1030.0002500082会给我1030.00025 此外,我想排除两位数字的任何尾随零 例如400.00201082会给我400.002 以下是更多的例子: 380.12939499→ 380.12 0.00003909
toFixed(2)
。只是为了保持简单
223.3284293.toFixed(2);
“223.33”
我现在需要一个更复杂的解决方案。我想要任何尾随零后面的最后两个数字
例如1030.0002500082
会给我1030.00025
此外,我想排除两位数字的任何尾随零
例如400.00201082
会给我400.002
以下是更多的例子:
380.12939499
→ <代码>380.12
0.00003909200049
→ <代码>0.000039
0.0000004000004
→ <代码>0.0000004
39094.0302990004
→ <代码>39094.03
75.0000003000001
→ <代码>75.0000003
5.000000000000000
→ <代码>5
我认为使用将是实现这一目标的最佳方式
如何指定包含尾随零后的两个数字,同时仍然排除这两个数字中的任何零?您可以使用此正则表达式替换:
str = str.replace(/^(\d*)(?:\.0*|(\.0*[1-9]{1,2}).*)$/, '$1');
正则表达式分解:
-开始^
匹配和捕获组中点前的捕获编号#1(\d*)
启动非捕获组(?:
匹配点后跟零个或多个\.0*
0s
或|
匹配点后跟0或多个(\.0*[1-9]{1,2})。*
后跟1或2个非零,并将其捕获到组2中0
结束非捕获组)
结束$
var-arr=[
'23.3284293',
'1030.0002500082',
'400.002010082',
'380.12939499',
'0.00003909200049',
'0.0000004000004',
'39094.03029900004',
'75.00000030000001',
'5.0000000'
];
arr=arr.map(str=>str.replace(/^(\d*)(?:\.0*|(\.0*[1-9]{1,2})。*)$/,“$1$2”);
控制台日志(arr)代码>您可以使用此正则表达式替换:
str = str.replace(/^(\d*)(?:\.0*|(\.0*[1-9]{1,2}).*)$/, '$1');
正则表达式分解:
^
-开始
(\d*)
匹配和捕获组中点前的捕获编号#1
(?:
启动非捕获组
\.0*
匹配点后跟零个或多个0s
|
或
(\.0*[1-9]{1,2})。*
匹配点后跟0或多个0
后跟1或2个非零,并将其捕获到组2中
)
结束非捕获组
$
结束
代码演示:
var-arr=[
'23.3284293',
'1030.0002500082',
'400.002010082',
'380.12939499',
'0.00003909200049',
'0.0000004000004',
'39094.03029900004',
'75.00000030000001',
'5.0000000'
];
arr=arr.map(str=>str.replace(/^(\d*)(?:\.0*|(\.0*[1-9]{1,2})。*)$/,“$1$2”);
控制台日志(arr)代码>您可以尝试以下正则表达式:
\d+(\.(0+|)[1-9][1-9]?|)
让数字=[
'380.12939499',
'0.00003909200049',
'0.0000004000004',
'39094.03029900004',
'75.00000030000001',
'5.0000000'
];
设res=numbers.map(v=>v.match(/\d+(\(0+)[1-9][1-9]?)/)[0]);
控制台日志(res)代码>您可以尝试以下正则表达式:
\d+(\.(0+|)[1-9][1-9]?|)
让数字=[
'380.12939499',
'0.00003909200049',
'0.0000004000004',
'39094.03029900004',
'75.00000030000001',
'5.0000000'
];
设res=numbers.map(v=>v.match(/\d+(\(0+)[1-9][1-9]?)/)[0]);
控制台日志(res)代码>您可以使用^(\d+(?:\.0*[1-9]{1,2}).$
;捕获所有整数部分和小数(小数部分是可选的,因此如果模式不匹配,则仅获取整数部分),最多两个非零数字位于可选零之后:
var示例=['380.12939499','0.00003909200049','0.0000004000004','39094.0302990004','75.0000003000001','5.000000000000000'];
console.log(
examples.map(x=>x.replace(/^(\d+(?:\.0*[1-9]{1,2})?).*$/,“$1”))
);代码>您可以使用^(\d+(?:\.0*[1-9]{1,2}).$
;捕获所有整数部分和小数(小数部分是可选的,因此如果模式不匹配,则仅获取整数部分),最多两个非零数字位于可选零之后:
var示例=['380.12939499','0.00003909200049','0.0000004000004','39094.0302990004','75.0000003000001','5.000000000000000'];
console.log(
examples.map(x=>x.replace(/^(\d+(?:\.0*[1-9]{1,2})?).*$/,“$1”))
);代码>那5.000000000000000000000
呢?@ibrahimmahrir5.000000000000000000000
将输出5
。用你的例子更新了问题。谢谢。这不会像您使用223.3284293.toFixed(2)时那样给您带来任何舍入
这会有问题吗?@sln No.我只使用了toFixed
,因为它很简单。那么5.000000000000000000000
呢?@ibrahimmahrir5.000000000000000000000
将输出5
。用你的例子更新了问题。谢谢。这不会像您使用223.3284293.toFixed(2)时那样给您带来任何舍入
这会有问题吗?@sln没有。我只使用了toFixed
,因为它很简单。