新手问题 求教一个正则问题

i5ting · 2013年03月05日 · 最后由 zj0713001 回复于 2013年03月05日 · 2517 次阅读

替换,保留一个数字的小数点 2 位

比如

12.345677 => 12.345 12.340000 => 12.34

perl 的写法

$result =~ s/(.\d\d[1-9]?)\d*/$1/

求教,ruby 应该怎么写?

ruby 正则

  • sub
  • gsub
  • scan
  • =~
  • match

怎么写最简单呢?

irb(main):030:0> /(\.\d\d[1-9]?)\d*/.match('12.34567')[1]
=> ".345"
irb(main):031:0> /(\.\d\d[1-9]?)\d*/.match('12.340000')[1]
=> ".34"

能匹配出$1

在 ruby 了,匹配结果是 matchData 对象,用$~表示,它是一个数组

$~【0】是匹配结果 $~【1---n】是正则里的()匹配的结果


土办法

/(\.\d\d[1-9]?)\d*/.match('12.34567')
p '12.34567'.sub($~[0],$~[1])
irb(main):001:0> /(\d*\.\d\d)\d*/.match('12.34567')[1]
=> "12.34"
匿名 #3 2013年03月05日

非正则方式 ("%0.2f" % 11.45534545).to_f => 11.45

#3 楼 @lewisgrady 你这个会进位啊 而且直接 "%.2f" 就行 结果是 11.46 还可以用 12.34567.round(2) 但是也是进位

用 bigdecimal 来处理啊,还能指定进位的方法是舍尾还是四舍五入

而用round方法的话,在数字是负数的时候就是一个坑啊。。。

-12.5.round
=> -13 #??确定不是-12么。。。
6 楼 已删除

#5 楼 @ywjno #4 楼 @zj0713001 #3 楼 @lewisgrady #2 楼 @gonglexin

感谢各位,我主要是想尝试一下正则,哈哈

#5 楼 @ywjno 5 楼说的对

#7 楼 @i5ting

我也感觉你是想尝试正则哈 一般我用的比较多的有 match scan 你可以查一下字符串的文档

需要 登录 后方可回复, 如果你还没有账号请 注册新账号