Javascript 使用正则表达式删除指数数的尾随零
使用正则表达式,如何删除1.0000000000 E+12的尾随零 例如:Javascript 使用正则表达式删除指数数的尾随零,javascript,regex,scientific-notation,Javascript,Regex,Scientific Notation,使用正则表达式,如何删除1.0000000000 E+12的尾随零 例如: 1.0000000000 E+12的结果应为:1e+12 1.0000000000e12结果应为:1e12 1.0000000000e-12的结果应为:1e-12 1.1200000000e+12的结果应为:1.12e+12 994.44结果应为:994.44 这是一个有点困难的问题,因为您必须确保数字中有一个小数点,以仅消除其中的无意义的零(零在小数点的左侧是有意义的)。您还必须保留小数点后的有意义数字,并仅消除最后
- 1.0000000000 E+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");
很抱歉,它不能消除小数点,因为它后面可以有有效的数字
看
更新
如果还希望选择性地删除点,可以使用下一个regexp和模式替换:
str.replace(/(\.[0-9]*[1-9])0*|(\.0*)/, "$1");
看
函数删除零(数字){
返回编号。替换(/(\[0-9]*[1-9])0*(\.0*)/,“$1”);
}
写入(删除零('1.000000000 E12')+'
);
写入(删除零('1.000000000 e-12')+'
);
写入(删除零('1.000000000 e-12')+'
);
文件。写入(删除零('1.001200000e-12')+'
);
文件写入(删除零('1.120000000e+12')+'
);
文件写入(删除零('10.120000000e+12')+'
);
写入(删除零('10e12')+'
);
写入(删除零('994.44')+'
';
写入(删除零('994.4400000000')+'
);
写入(删除零('100000000.000')+'
);
写入(删除零('10000000.0')+'
';
写入(删除零('123.0000000 1230000')+'
)代码>使用
可以指定小数点后的位数,但如果省略,则默认为指定数字所需的位数
它唯一不能做的事情就是(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.0000000000 E12
变成1e12
时,我假设你意识到在JS中1.0000000000 E12
和1.0000000000 E+12
之间没有区别。以任何一种格式指定的数字都意味着相同的事情,一旦解释器解析,就无法恢复是否最初指定了+
。因此,我假设您是从某个地方以字符串的形式获取这些数字,在那里可以检测到+
的存在或不存在?如果是这种情况,您可以在输入时检查+
是否存在,如果不存在,则将其从Number.toExponential
的结果中删除
要处理案例994.44
,您可以设置一个检查以应用Number.toExponential
仅对超过某个阈值的数字;或者,如果数字是以字符串形式输入的,您可以检测指数的存在或不存在,如果不存在,则跳过对数字的调用。toExponential
这些不是前导零,而是尾随零。@anubhava,谢谢。从你的评论来看,我想你没有看到它。谢谢你的投票。@LuisColorado:希望你不介意……我在你的解决方案中添加了一个代码片段,提供了我的测试用例和你的测试用例的组合。您的解决方案似乎通过了所有测试。干得好+1fine,但它不会给解决方案添加太多内容,因为它已经在regexp演示中演示过了。