使用RegEx删除指数数字的尾随零

时间:2015-09-08 21:19:42

标签: javascript regex scientific-notation

使用正则表达式,如何删除1.0000000000e + 12的尾随零?

例如:

  • 1.0000000000e + 12应该产生:1e + 12
  • 应该得到
  • 1.0000000000e12:1e12
  • 1.0000000000e-12应该产生:1e-12
  • 1.1200000000e + 12应该产生:1.12e + 12
  • 994.44应该得到:994.44

2 个答案:

答案 0 :(得分:2)

这是一个有点难的问题,因为你必须确保数字中有一个小数点,以便只消除其中的非有意义的零(小数点的左边部分有意义的零)。您必须在小数点后保留有效数字并仅消除最终的零。此外,并非所有浮点数都以基本指数因子终止,这是我的方法:

str.replace(/\.([0-9]*[1-9])?0*/g, ".$1");

很抱歉,但它不会消除小数点,因为您可以使用有效数字。

请参阅RegEx Demo

更新

如果你想同时删除点,你可以使用下一个正则表达式和模式替换:

str.replace(/(\.[0-9]*[1-9])0*|(\.0*)/, "$1");

请参阅Regexp Demo

function removeZeroes(number) {
  return number.replace(/(\.[0-9]*[1-9])0*|(\.0*)/, "$1");
}

document.write(removeZeroes('1.000000000e12') + '<br />');
document.write(removeZeroes('1.000000000e-12') + '<br />');
document.write(removeZeroes('1.000000000E-12') + '<br />');
document.write(removeZeroes('1.001200000e-12') + '<br />');
document.write(removeZeroes('1.120000000e+12') + '<br />');
document.write(removeZeroes('10.120000000e+12') + '<br />');
document.write(removeZeroes('10e12') + '<br />');
document.write(removeZeroes('994.44') + '<br />');
document.write(removeZeroes('994.4400000000') + '<br />');
document.write(removeZeroes('100000000.000') + '<br />');
document.write(removeZeroes('10000000.0') + '<br />');
document.write(removeZeroes('123.00000001230000') + '<br />');

答案 1 :(得分:0)

使用Number.toExponential

您可以指定小数点后的位数,但如果省略,则默认为指定数字所需的位数。

它说你想要的唯一不做的事情是(1)总是在指数之前放置+,而(2)不会对你不喜欢的数字起作用。我希望采用指数格式。

INPUT            OUTPUT
1.0000000000e+12 1e+12
1.0000000000e12  1e+12
1.0000000000e-12 1e-12
1.1200000000e+12 1.12e+12
994.44           9.9444e+2

为了更贴近您的需求,您可以编写一个小包装。

如果您希望1.0000000000e12成为1e12,我假设您在JS中意识到符号1.0000000000e121.0000000000e+12之间没有区别。以任一格式指定的数字意味着相同的东西,并且一旦解释器解析,就无法恢复最初是否指定了+。所以我想你是从某个地方得到这些数字的字符串,可以检测到+的存在与否?如果是这种情况,您可以检查输入是否存在+,如果不存在,则将其从Number.toExponential的结果中删除。

要处理案例994.44,您可以设置一项检查,仅将Number.toExponential应用于超过特定阈值的数字;或者,如果数字以字符串形式出现,您可以检测到指数的存在与否,如果不存在,则跳过对Number.toExponential的调用。