Ruby Regex对尾随零进行舍入

nue99wik  于 2023-08-04  发布在  Ruby
关注(0)|答案(3)|浏览(84)

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

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

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

5cnsuln7

5cnsuln71#

只是另一种方式

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

字符串

gev0vcfq

gev0vcfq2#

试试regex:

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

字符串
并将其改为:

\1


演示:

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"
}


其产生相同的输出。

mzaanser

mzaanser3#

这里是一个更优化的正则表达式解决方案。
搜索此正则表达式:

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

字符串
并替换为:

\1


RegEx Demo

RegEx详情:

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

相关问题