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

     2023-04-13     114

关键词:

【中文标题】使用 RegEx 删除指数数字的尾随零【英文标题】:Remove trailing zeros for exponential numbers using RegEx 【发布时间】:2015-09-08 21:19:42 【问题描述】:

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

【问题讨论】:

那些不是前导零,而是尾随零。 【参考方案1】:

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

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

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

见RegEx Demo

更新

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

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

【讨论】:

@anubhava,谢谢。我想你没有看到它,就像你的评论一样。感谢您的支持。 @LuisColorado:希望你不介意......我在你的解决方案中添加了一个代码 sn-p,提供了我和你的测试用例的组合。您的解决方案似乎通过了所有测试。做得好! +1 很好,但它并没有给解决方案增加太多,因为它已经通过正则表达式演示进行了演示。【参考方案2】:

使用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 的结果中删除。

要处理994.44 的情况,您可以设置检查以仅将Number.toExponential 应用于超过特定阈值的数字;或者,如果数字以字符串形式出现,您可以检测指数是否存在,如果不存在,则跳过对 Number.toExponential 的调用。

【讨论】:

如何格式化浮点值,使其从不使用指数表示法,也没有尾随零?

】如何格式化浮点值,使其从不使用指数表示法,也没有尾随零?【英文标题】:HowdoIformatafloatingpointvaluesothatitneverusesexponentnotationnorhastrailingzeros?【发布时间】:2013-02-0415:08:28【问题描述】:根据ios_basemanipulators,在格式化没有... 查看详情

如何从sqlplus中的数字列中删除小数点后的尾随零?

】如何从sqlplus中的数字列中删除小数点后的尾随零?【英文标题】:Howtoremovetrailingzerosafterdecimalpointsfromnumbercolumninsqlplus?【发布时间】:2018-05-2411:57:34【问题描述】:我有一个名为Amount的数据库表字段,其类型为number(38,8),在sql... 查看详情

删除小数点雪花后的尾随零

】删除小数点雪花后的尾随零【英文标题】:RemovingtrailingzeroesafterdecimalSnowflake【发布时间】:2021-12-0111:24:52【问题描述】:我一直在尝试从小数点后的数字列中删除尾随零。例如:0.978219150000->0.978219150.650502591918->0.650502591918... 查看详情

使用 NSNumberFormatter 生成小数点后尾随零的数字

】使用NSNumberFormatter生成小数点后尾随零的数字【英文标题】:UsingNSNumberFormattertogeneratenumberwithtrailingzerosafterdecimal【发布时间】:2014-10-2805:57:44【问题描述】:在Swift中,您将如何创建一个NSNumberFormatter来保留小数点(12.000)后的尾... 查看详情

删除前导零和尾随零并将结果保留到小数点后两位

】删除前导零和尾随零并将结果保留到小数点后两位【英文标题】:Removingleadingandtrailingzerosandhavetheresultintwodecimalplaces【发布时间】:2020-01-2719:23:37【问题描述】:我想删除前导零和尾随零,并希望将结果保留到小数点后两位。... 查看详情

JavaScript - 保持尾随零[重复]

...:2014-09-1309:34:08【问题描述】:我想解析一个字符串,我使用了parseFloat(),但它删除了所有尾随零。如何防止这种情况-我需要准确解析字符串-如果我有2.5000,我需要与浮点数完全相同的结果-2.5000。【问题讨论】:2.50000和2.5是... 查看详情

如何删除字符串中的前导零和尾随零? Python

】如何删除字符串中的前导零和尾随零?Python【英文标题】:Howtoremoveleadingandtrailingzerosinastring?Python【发布时间】:2012-10-1923:46:18【问题描述】:我有几个像这样的字母数字字符串listOfNum=[\'000231512-n\',\'1209123100000-n00000\',\'alphanumer... 查看详情

我如何确保十进制中有一定数量的数字(尾随零)

...我的网站上,有金额被回显。当我从金额中减去时,它会删除尾随的零,直到我注销并重新登录我的帐户。有没有办法检查小数点后是否总是有两个数字,如果没有则添加零?这是我的php减法代 查看详情

从 byte[] 中删除尾随零?

...yte[]?【发布时间】:2012-07-0101:47:03【问题描述】:我正在使用TCP协议并从套接字读取并将数据写入byte[]数组。这是我的数据示例:9439E5D93283D85D4CB1CB99080045000098419F40006C069C462650487DC0A801050328我创建了一个大小为1024的byte[]数组。 查看详情

从十进制字符串中删除尾随零

...我有这些号码:0.000001000.001000000.010000000.00001000我想通过使用这个来删除十进制中不必要的零:$decimal_cutter=(float)$decimal_cutter;echosprintf(\'%f\',$deci 查看详情

Swift - 从 Double 中删除尾随零

】Swift-从Double中删除尾随零【英文标题】:Swift-RemoveTrailingZerosFromDouble【发布时间】:2015-06-1603:09:57【问题描述】:从双精度中删除尾随零的函数是什么?vardouble=3.0vardouble2=3.10println(func(double))//3println(func(double2))//3.1【问题讨论】... 查看详情

数字字段项的格式掩码:尾随和“前导”零

】数字字段项的格式掩码:尾随和“前导”零【英文标题】:Formatmaskfornumberfielditems:trailingand\'leading\'zero【发布时间】:2011-10-1110:45:14【问题描述】:我在顶点中显示数字时遇到了一些问题,但只有当我通过代码填写它们时。当... 查看详情

我想在使用 DecimalFormat 时保留尾随零

】我想在使用DecimalFormat时保留尾随零【英文标题】:IwanttokeepmytrailingzeroeswhenusingDecimalFormat【发布时间】:2017-04-2706:12:19【问题描述】:下面的代码是我尝试将我的三个双精度数转换为它们总是有四位小数的格式(因为我需要用... 查看详情

在python中以十进制数字显示尾随零而不返回字符串

...问题描述】:我需要在十进制数中显示尾随零。我曾考虑使用pythonformat(),但它返回一个字符串,当我将其转换为浮点数或小数时,尾随零消失。p>我也尝试过使用pythonde 查看详情

c_cpp计算数字的尾随零是由因子计算的(代码片段)

查看详情

从 SQL Server 中的十进制中删除尾随零

】从SQLServer中的十进制中删除尾随零【英文标题】:RemovetrailingzerosfromdecimalinSQLServer【发布时间】:2011-02-2516:01:57【问题描述】:我有一列DECIMAL(9,6),即它支持像999,123456这样的值。但是当我插入像123,4567这样的数据时,它变成了1... 查看详情

如何从双精度中删除尾随零 [重复]

】如何从双精度中删除尾随零[重复]【英文标题】:Howtoremovetrailingzerosfromadouble[duplicate]【发布时间】:2012-12-2117:03:43【问题描述】:例如,我需要将5.0变为5,或将4.3000变为4.3。【问题讨论】:注意:与链接问题中的最佳答案不... 查看详情

JS:将带有尾随零的数字替换为科学记数法

】JS:将带有尾随零的数字替换为科学记数法【英文标题】:JS:Replaceanumberwithtrailingzerostoscientificnotation【发布时间】:2017-11-0418:22:46【问题描述】:我正在创建一个网站,该网站在TI-BASIC(TI-83+/TI-84+计算器上的一种内置的、有点... 查看详情