Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式如何从十进制数中删除尾随的零_Regex_Actionscript 3 - Fatal编程技术网

Regex 使用正则表达式如何从十进制数中删除尾随的零

Regex 使用正则表达式如何从十进制数中删除尾随的零,regex,actionscript-3,Regex,Actionscript 3,我需要编写一些正则表达式,它接受一个数字并删除小数点后的任何尾随零。语言是ActionScript3。因此,我想写: var result:String = theStringOfTheNumber.replace( [ the regex ], "" ); 例如: 3.04000将是3.04 0.456000将是0.456等 我花了一些时间浏览了各种regex网站,发现这比我最初想象的更难解决。regex: ^(\d+\.\d*?[1-9])0+$ 或 替换字符串: $1 代码: va

我需要编写一些正则表达式,它接受一个数字并删除小数点后的任何尾随零。语言是ActionScript3。因此,我想写:

var result:String = theStringOfTheNumber.replace( [ the regex ], "" );
例如:

3.04000
将是
3.04

0.456000
将是
0.456

我花了一些时间浏览了各种regex网站,发现这比我最初想象的更难解决。

regex:

^(\d+\.\d*?[1-9])0+$

替换字符串:

$1

代码:

var result:String = theStringOfTheNumber.replace(/(\.\d*?[1-9])0+$/g, "$1" );
试试这个。抓拍。看演示

试试这个

^(?!0*(\.0+)?$)(\d+|\d*\.\d+)$
读一下这个
这可能会有帮助。

如果
后面至少有一个数字,那么在
\b
之前去掉尾随的零怎么样

(\.\d+?)0+\b
并替换为第一次捕获的内容


参见

我知道这不是最初的问题所要寻找的,而是任何想要格式化货币并且只想删除两个连续的尾随零的人,比如:

£30.00 => £30
£30.10 => £30.10 (and not £30.1)

30.00€ => 30€
30.10€ => 30.10€
然后您应该能够使用下面的正则表达式,它将标识两个尾随的零,后面没有任何其他数字,或者存在于字符串的末尾

([^\d]00)(?=[^\d]|$)

如果正则表达式引擎不支持“环顾”功能,则可以使用以下简单方法:

fn:replace("12300400", "([^0])0*$", "$1")

结果将是:123004是否真的需要使用正则表达式?为什么不检查一下数字的最后几位呢?我不熟悉Actionscript 3,但在python中,我会这样做:

decinums = ['1.100', '0.0','1.1','10']
for d in decinums:
    if d.find('.'):
        while d.endswith('0'):
            d = d[:-1]
    if d.endswith('.'):
        d = d[:-1]
    print(d)
结果将是:

1.1
0
1.1
10

对我最有效的是

^([\d,]+)$|^([\d,]+)\.0*$|^([\d,]+\.[0-9]*?)0*$
比如说,

s.replace(/^([\d,]+)$|^([\d,]+)\.0*$|^([\d,]+\.[0-9]*?)0*$/, "$1$2$3");
这就改变了

1.10000 => 1.1
1.100100 => 1.1001
1.000 => 1
1 >= 1

我参加聚会有点晚了,但我的解决办法是:


<代码>((P<)其他答案没有考虑没有分数的数字(如<代码> 1 000000 )或使用了望功能(遗憾的是,我正在使用的实现不支持)。所以我修改了现有的答案。

  • 使用
    ^-?\d+(\.\d*[1-9])?
    -(请参阅匹配项)匹配
    。这不适用于文本中的数字(如句子)
  • 使用
    (^-?\d+\.\d*[1-9])(0+$)|(\.0+$)
    -(请参见替换)替换(使用
    \1
    $1
    ),如果删除
    ^
    $
    ,则此项将与文本中的数字(如句子)一起使用
两个演示都带有示例

旁注:如果必须的话,用十进制分隔符(
-不需要斜杠)替换
\.
,但我建议不要在这样的正则表达式中支持多种分隔符格式(如
(\.\124;,)
).内部格式通常使用一个特定的分隔符,如
1.135644131
中的
(无需检查其他可能的分隔符),而外部格式则倾向于同时使用这两个分隔符(一个用于小数,一个用于千,如
1.123541921
),这将使您的正则表达式不可靠


更新:我在两个正则表达式中都添加了
-?
,以增加对负数的支持,这不在演示中。

我知道我有点晚了,但我认为这可以用更简单的方法解决。 要么我错过了一些东西,要么其他回复者将其过度复杂化,但我认为有一个更直接但更具弹性的解决方案:

([0-9]*[.]?([0-9]*[1-9]|[0]?))[0]*
通过反向引用第一个组(\1),可以获得不带尾随零的数字

它还可用于.XXXXX…和…XXXXX。键入数字字符串。例如,它将.45600转换为.456,并将123.转换为123

更重要的是,它保留完整的整数字符串(没有小数点的数字)。例如,它将12300转换为12300

请注意,如果有一个小数点,并且在小数点之后只有零,则只会留下一个尾随的零。例如,对于42.0000,您将得到42.0

如果还想消除前导零,则使用此RE(只需在前导零的开头加一个[0]*:


我测试了上面的几个答案:

^(\d+\.\d*?[1-9])0+$
(\.\d*?[1-9])0+$
(\.\d+?)0+\b
当“.”后面都是零时,它们都不起作用,例如
45.000
450.000

修改版本以匹配该情况:
(\。\d*?[1-9]|)\?0+$
还需要替换为“$1”,如:

preg_replace('/(\.\d*?[1-9]|)\.?0+$/', '$1', $value);

将字符串转换为帮助行吗?嗨,Duniyadnd。我理解你为什么这么说。遗憾的是,在大型浮点计算中,ActionScript 3对带小数点的数字做了一些奇怪的事情。有些结果是,如果我们将结果转换回数字,它将以浮点格式返回。不知道op的输入是否为星形带小数点的t。我也添加了这个答案。哦,这也可以。
^(\d*\。\d*?[1-9])0+$
感谢大家的回复。建议的表达式似乎与ActionScript 3不兼容。这里编写的任何表达式都可以为这个AS3友好的正则表达式解析器进行翻译吗:请参见此处的工作原理。如果正则表达式包含在双引号中,则需要再次像
(\\.\\d*?[1-9])一样转义反斜杠0+$
Hi Avinash。感谢您的更新。您的正则表达式正在选择小数点后的所有数字。您是否可以向我显示只选择小数点后尾随零的正则表达式,例如0.456000变为0.456等。非常感谢,请将匹配的字符替换为
$1
,请参阅替换at在上面链接的底部。您只能通过替换函数去除尾随的零。这对我很有用。一些输入:
“纬度”:19.4225447900000,“经度”:-99.216200500000000
。如果它都是零,我如何使它保留2个零而不是1个?
([0-9]*[.]?([0-9]*[1-9]|[0]?))[0]*
[0]*([0-9]*[.]?([0-9]*[1-9]|[0]?))[0]*
^(\d+\.\d*?[1-9])0+$
(\.\d*?[1-9])0+$
(\.\d+?)0+\b
preg_replace('/(\.\d*?[1-9]|)\.?0+$/', '$1', $value);