Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式从浮点中过滤出小数_Regex_Javascript_Floating Point_Numbers_Decimal - Fatal编程技术网

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');

正则表达式分解:

  • ^
    -开始
  • (\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)您可以使用此正则表达式替换:

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
呢?@ibrahimmahrir
5.000000000000000000000
将输出
5
。用你的例子更新了问题。谢谢。这不会像您使用
223.3284293.toFixed(2)时那样给您带来任何舍入
这会有问题吗?@sln No.我只使用了
toFixed
,因为它很简单。那么
5.000000000000000000000
呢?@ibrahimmahrir
5.000000000000000000000
将输出
5
。用你的例子更新了问题。谢谢。这不会像您使用
223.3284293.toFixed(2)时那样给您带来任何舍入
这会有问题吗?@sln没有。我只使用了
toFixed
,因为它很简单。