2011-02-06 11 views

cevap

8

regex deneyin:

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

ve ile değiştirin:

\1 

Bir demo:

tests = ['0.0002300', '10.002300', '100.0', '1000', '0.0', '0'] 
tests.each { |tst| 
    print tst, " -> ", tst.sub(/(?:(\..*[^0])0+|\.0+)$/, '\1'), "\n" 
} 

üretir:

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

Veya sadece yapabileceği "%g" % tst sondaki sıfırları düşmesi: Aynı çıktıyı üretir

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

.

+1

ben olması gerekenden ama o kadar +1 çalışır olmadığı kadar çok daha karmaşık olduğunu düşünüyorum. –

+0

:), Tamamen katılıyorumMark. Ben biraz parladı, ama kısa bir kesim göremiyorum ... –

+0

Evet, şu anda daha basit bir çözüm öneremem .... Ben pes ediyorum. :) –

12

başka bir yolu

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

Teşekkürler, bu harika! Çözümünüz "% g"% x sadece 6 karakter! – antinome