2011-02-06 7 views
5

10進数の末尾のゼロを削除するための正規表現を探しています。これは、以下の結果を返す必要があり:末尾のゼロを丸めるRuby Regex

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

基本的には、後続ゼロを削除し、小数部は、それが値だ場合にも0を返す必要が0である場合は小数点を後続すべきです。何かご意見は?ありがとう。

答えて

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 

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

同じ出力を生成します:

それとも、単に末尾のゼロを削除するには​​を行うことができます。

+1

私は、それが必要以上に多くの複雑だが、それはそう+1をうまくいくと思います。 –

+0

:)、私は完全に@マークに同意します。私は少しぼやけたが、ショートカットを見ることはできません... –

+0

今、もっと簡単な解決法を提案することはできません....私はあきらめます。 :) –

12

もうひとつの方法

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

ありがとう、これは素晴らしいです!あなたのソリューション "%g"%xはわずか6文字です! – antinome

関連する問題