Javascript 使用正则表达式删除指数数的尾随零

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的尾随零

例如:

  • 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演示中演示过了。