繁体   English   中英

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

[英]Remove trailing zeros for exponential numbers using RegEx

使用正则表达式,如何删除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

这是一个有点困难的问题,因为您必须确保数字中有一个小数点才能仅消除其中的非有效零(零在小数点的左侧是有效的)。 您还必须保留小数点的有效数字并仅消除最后的零。 另外,并非所有浮点数都以基本指数因子结尾,这是我的方法:

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

抱歉,它不能消除小数点,因为它后面可以有有效数字。

参见RegEx演示

更新

如果您还可以选择删除点,则可以使用下一个正则表达式和模式替换:

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

请参阅正则表达式演示

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

使用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的结果中Number.toExponential

要处理994.44情况,您可以设置检查以仅将Number.toExponential应用于超过特定阈值的数字; 994.44 ,可以执行以下操作: 或者,如果数字再次以字符串形式输入,则可以检测到指数的存在或不存在,如果不存在,则跳过对Number.toExponential的调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM