2009-12-19 16 views
47

¿Es posible ajustar la precisión de visualización de un flotador en Ruby?Establecer la precisión de visualización de un flotador en Ruby

Algo así como:

z = 1/3 
z.to_s #=> 0.33333333333333 
z.to_s(3) #=> 0.333 
z.to_s(5) #=> 0.33333 

O tengo que reemplazar el método de Floatto_s?

+0

¿Cuál es 'x'? ... –

+0

Disculpa, x era un error tipográfico. –

+10

¿qué tal z.round (2), z.round (3)? – v4r

Respuesta

34

Puede utilizar sprintf:

sprintf("%0.02f", 123.4564564) 
+4

Prefiero esto para cuando quiero el ".00" que 'round (2)' no da. –

+9

Esto es un poco divertido, nunca utilicé el rubí en mi vida. No sé cómo escribir un programa mundial de hola y nunca lo hice. Probablemente solo busqué en Google la pregunta del OP y publiqué la respuesta. –

+0

'pone" Hola, mundo "' - ¡Jaja! ¡Ahora sabes cómo escribir un programa hello world! –

32

normalmente me acaba de hacer la conversión en código abierto, algo así como:

puts "%5.2f" % [1.0/3.0] 

Rubí llama Kernel#format de expresiones como ésta, debido cadena tiene un core operator % defined en eso. Piense en ello como printf para Ruby si eso le suena a cualquier campanas.

+8

¿Alguien puede explicar esto? – you786

+0

Comprueba 'Formato de kernel # '. – maletor

+0

este me dio un personaje espacial líder. Utilicé la respuesta de Andreas y lo hizo sin el carácter de espacio. No pude entender la documentación sobre esto o explicaría por qué lol –

59

z.round(2) o x.round(3) es la solución más simple. Ver http://www.ruby-doc.org/core-1.9.3/Float.html#method-i-round.

Dicho eso, eso solo asegurará que no sea más que esos muchos dígitos. En el caso de 1/3, está bien, pero si dijeras 0.25.round(3) obtendrás 0.25, no 0.250.

+1

FYI, esto fue agregado en Ruby 1.9.2, por lo que no funcionará con las versiones anteriores – nbarraille

+1

+1 para la nota sobre '(0.25). round (3) 'not yielding' 0.250' Ver la respuesta de Andreas Bonini para evitar esto. –

0

Puede utilizar pone

z = #{'%.3f' % z} 
Cuestiones relacionadas