使用正则表达式过滤掉浮点数小数点
我有一些float
数字有很多小数。我一直试图通过设置最多两位十进制数来保持整洁。使用正则表达式过滤掉浮点数小数点
到目前为止我已经使用toFixed(2)
。只是为了保持简单。
223.3284293.toFixed(2);
“223.33”
我现在需要一个更复杂的解决方案。我想要最后的两个后面的零后面的数字。
例如1030.0002500082
会给我1030.00025
。
此外,我想要排除两位数的任何尾随零。
例如400.002010082
会给我400.002
。
下面是一些例子:
380.12939499
→380.12
0.00003909200049
→0.000039
0.0000004000004
0.0000004
→
39094.03029900004
→39094.03
75.00000030000001
→75.0000003
5.000000000000000000000
→5
我想通使用regex将是实现这一目标的最佳途径。
我该如何指定在之后的两个数字将包含尾随零,而仍然不包括这两个数字中的任何零?
您可以使用此正则表达式替换:
str = str.replace(/^(\d*)(?:\.0*|(\.0*[1-9]{1,2}).*)$/, '$1');
正则表达式破碎:
-
^
- 在拍摄组点之前开始 -
(\d*)
匹配和捕获数#1 -
(?:
开始非捕获组-
\.0*
匹配斑点,随后的零个或更多0s
-
|
OR -
(\.0*[1-9]{1,2}).*
匹配斑点,随后0以上0s
接着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"));
console.log(arr);
@Kinduser:是的,用代码演示更新。 – anubhava
你可以尝试以下的正则表达式:
\d+(\.(0+|)[1-9][1-9]?|)
let numbers = [
'380.12939499',
'0.00003909200049',
'0.0000004000004',
'39094.03029900004',
'75.00000030000001',
'5.0000000'
];
let res = numbers.map(v => v.match(/\d+(\.(0+|)[1-9][1-9]?|)/)[0]);
console.log(res);
您可以使用^(\d+(?:\.0*[1-9]{1,2})?).*$
;捕获所有整数部分和小数(小数部分是可选的,所以如果该模式不匹配只取整数部分)至多两个非零位数以下可选零:
var examples = ['380.12939499', '0.00003909200049', '0.0000004000004', '39094.03029900004', '75.00000030000001', '5.000000000000000000000'];
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