Ruby Regex 舍入尾随零

发布于 2024-10-16 02:58:16 字数 258 浏览 2 评论 0原文

我正在寻找一个正则表达式来删除十进制数字中的尾随零。它应该返回以下结果:

0.0002300 -> 0.00023
10.002300 -> 10.0023
100.0     -> 100
1000      -> 1000
0.0       -> 0
0         -> 0

基本上,如果小数部分为 0,它应该删除尾随零和尾随小数点。当这是该值时,它也应该返回 0。有什么想法吗?谢谢。

I'm looking for a regex to remove trailing zeros from decimal numbers. It should return the following results:

0.0002300 -> 0.00023
10.002300 -> 10.0023
100.0     -> 100
1000      -> 1000
0.0       -> 0
0         -> 0

Basically, it should remove trailing zeros and trailing decimal point if the fraction part is 0. It should also return 0 when that's the value. Any thoughts? thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

爱冒险 2024-10-23 02:58:16

只是另一种方式

["100.0","0.00223000"].map{|x|"%g"%x}

just another way

["100.0","0.00223000"].map{|x|"%g"%x}
把梦留给海 2024-10-23 02:58:16

尝试使用 regex:

(?:(\..*[^0])0+|\.0+)$

并将其替换为:

\1

A demo: ,

tests = ['0.0002300', '10.002300', '100.0', '1000', '0.0', '0']
tests.each { |tst|
  print tst, " -> ", tst.sub(/(?:(\..*[^0])0+|\.0+)$/, '\1'), "\n"
}

它会产生:

0.0002300 -> 0.00023
10.002300 -> 10.0023
100.0 -> 100
1000 -> 1000
0.0 -> 0
0 -> 0

或者您可以简单地执行 "%g" % tst 来删除尾随零:

tests = ['0.0002300', '10.002300', '100.0', '1000', '0.0', '0']
tests.each { |tst|
  s = "%g" % tst
  print tst, " -> ", s, "\n"
}

,这会产生相同的输出。

Try the regex:

(?:(\..*[^0])0+|\.0+)$

and replace it with:

\1

A demo:

tests = ['0.0002300', '10.002300', '100.0', '1000', '0.0', '0']
tests.each { |tst|
  print tst, " -> ", tst.sub(/(?:(\..*[^0])0+|\.0+)$/, '\1'), "\n"
}

which produces:

0.0002300 -> 0.00023
10.002300 -> 10.0023
100.0 -> 100
1000 -> 1000
0.0 -> 0
0 -> 0

Or you could simply do "%g" % tst to drop the trailing zeros:

tests = ['0.0002300', '10.002300', '100.0', '1000', '0.0', '0']
tests.each { |tst|
  s = "%g" % tst
  print tst, " -> ", s, "\n"
}

which produces the same output.

我要还你自由 2024-10-23 02:58:16

这是更优化的正则表达式解决方案。

搜索此正则表达式:

(?:(\.[0-9]*[1-9])|\.)0+$

并替换为:

\1

正则表达式演示

正则表达式详细信息:

  • (?:: 启动非捕获组
    • (\.[0-9]*[1-9]):匹配一个点,后跟 0 多个任意数字,然后是一个数字 1-9。在组 #1 中捕获此值(用于替换反向引用 \1
    • <代码>|:或
    • \.:匹配点
  • < code>):结束非捕获组
  • 0+:匹配 1+ 个零
  • $:结束

Here is bit more optimized regex solution.

Search for this regex:

(?:(\.[0-9]*[1-9])|\.)0+$

and replace with:

\1

RegEx Demo

RegEx Details:

  • (?:: Start non-capture group
    • (\.[0-9]*[1-9]): Match a dot followed by 0+ instances of any digit and then a digit 1-9. Capture this value in group #1 (to be used in replacement back-reference \1)
    • |: OR
    • \.: Match a dot
  • ): End non-capture group
  • 0+: Match 1+ of zeroes
  • $: End
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文