2011-02-06 42 views
5

Estoy buscando una expresión regular para eliminar los ceros finales de los números decimales. Debe devolver los siguientes resultados:Ruby Regex para redondear ceros al final

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

Básicamente, se debe eliminar los ceros finales y posterior punto decimal si la parte de fracción es 0. También debería devolver 0 cuando eso es el valor. ¿Alguna idea? Gracias.

Respuesta

8

Pruebe la expresión regular:

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

y sustituirla por:

\1 

Una demostración:

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

que produce:

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

O simplemente podría hacer "%g" % tst a retirar los ceros a la derecha:

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

que produce la misma salida.

+1

Creo que es mucho más complicado de lo que debe ser, pero funciona de modo 1. –

+0

:), estoy totalmente de acuerdo @Mark. Lo miré un poco, pero no puedo ver un atajo ... –

+0

Sí, no puedo sugerir una solución más simple en este momento ... Me rindo. :) –

12

sólo otra manera

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

¡Gracias, esto es genial! ¡Su solución "% g"% x tiene solo 6 caracteres! – antinome

Cuestiones relacionadas