Ruby Regex用于舍入尾随零

时间:2011-02-06 11:24:01

标签: ruby regex fractions decimal-point

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

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

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

2 个答案:

答案 0 :(得分:12)

只是另一种方式

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

答案 1 :(得分:8)

试试正则表达式:

(?:(\..*[^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"
}

产生相同的输出。