使用正则表达式,如何删除1.0000000000e+12的尾随零?
例如:- 1.0000000000e+12应该得到:1e+12
- 1.0000000000e12应该产生:1e12
- 1.0000000000e-12应该产生:1e-12
- 1.200000000e +12应该得到:1.12e+12
- 994.44应该产生:994.44
这是一个有点困难的问题,因为您必须确保数字中有一个小数点,以便只消除其中不重要的零(小数点左侧的零是重要的)。您还必须保留小数点后的有效数字,并仅消除最后的零。此外,并非所有浮点数都以基数指数因子结束,这是我的方法:
str.replace(/.([0-9]*[1-9])?0*/g, ".$1");
对不起,它不能消除小数点,因为它后面可以有有效的数字。
参见RegEx Demo
更新如果你还想删除点,你可以使用下一个regexp和模式替换:
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 />');
使用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.0000000000e12
和1.0000000000e+12
的符号之间没有区别。以两种格式指定的数字意味着相同的事情,一旦被解释器解析,就没有办法恢复+
最初是否被指定。所以我想你是从某个地方得到这些数字作为字符串,在那里可以检测到+
的存在或不存在?如果是这种情况,您可以在输入时检查+
是否存在,如果不存在,则从Number.toExponential
的结果中删除它。
要处理994.44
的情况,您可以设置一个检查,仅将Number.toExponential
应用于超过某个阈值的数字;或者,如果数字以字符串形式传入,您可以检测指数是否存在,如果不存在,则跳过对Number.toExponential
的调用。