[英]Remove trailing zeros for exponential numbers using RegEx
使用正则表达式,如何删除1.0000000000e + 12的尾随零?
例如:
这是一个有点困难的问题,因为您必须确保数字中有一个小数点才能仅消除其中的非有效零(零在小数点的左侧是有效的)。 您还必须保留小数点后的有效数字,并仅消除最后的零。 另外,并非所有浮点数都以基本指数因子结尾,这是我的方法:
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 />');
您可以指定小数点后的位数,但如果省略,默认为指定位数。
它唯一没有做的就是您要说的是(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.0000000000e12
和1.0000000000e+12
之间没有区别。 两种格式中指定的数字都具有相同的含义,并且一旦被解释器解析,就无法恢复是否最初指定了+
。 因此,我想您是从某个可以检测到+
的存在与否的地方以字符串形式获取这些数字的? 如果是这样,您可以检查输入中是否存在+
,如果没有,则将其从Number.toExponential
的结果中Number.toExponential
。
要处理994.44
情况,您可以设置检查以仅将Number.toExponential
应用于超过特定阈值的数字; 994.44
,可以执行以下操作: 或者,如果数字再次以字符串形式输入,则可以检测到指数的存在或不存在,如果不存在,则跳过对Number.toExponential
的调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.