替换,保留一个数字的小数点 2 位
比如
12.345677 => 12.345 12.340000 => 12.34
perl 的写法
$result =~ s/(.\d\d[1-9]?)\d*/$1/
求教,ruby 应该怎么写?
ruby 正则
怎么写最简单呢?
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"
非正则方式 ("%0.2f" % 11.45534545).to_f => 11.45
("%0.2f" % 11.45534545).to_f
11.45
#3 楼 @lewisgrady 你这个会进位啊 而且直接 "%.2f" 就行 结果是 11.46 还可以用 12.34567.round(2) 但是也是进位
用 bigdecimal 来处理啊,还能指定进位的方法是舍尾还是四舍五入
而用round方法的话,在数字是负数的时候就是一个坑啊。。。
round
-12.5.round => -13 #??确定不是-12么。。。
#5 楼 @ywjno #4 楼 @zj0713001 #3 楼 @lewisgrady #2 楼 @gonglexin
感谢各位,我主要是想尝试一下正则,哈哈
#5 楼 @ywjno 5 楼说的对
#7 楼 @i5ting
我也感觉你是想尝试正则哈 一般我用的比较多的有 match scan 你可以查一下字符串的文档