2012-08-02 9 views
11

Aquí está mi códigoCómo visualizar la salida con dos dígitos de precisión

class Atm 

    attr_accessor :amount, :rem, :balance 

    TAX = 0.50 

    def transaction 

    @rem = @balance=2000.00 
    @amount = gets.chomp.to_f 

    if @amount%5 != 0 || @balance < @amount 
     "Incorrect Withdrawal Amount(not multiple of 5) or you don't have enough balance" 
    else 
     @rem = @balance-(@amount+TAX) 
     "Successful Transaction" 
    end 
    end 
end 

a=Atm.new 
puts "Enter amount for transaction" 
puts a.transaction 
puts "Your balance is #{a.rem.to_f}" 

y mi salida es

Enter amount for transaction 
100        # user enters this value 
Successful Transaction 
Your balance is 1899.5 

como se puede ver la salida, Su saldo es 1899,5 'sólo muestra una dígito de precisión. Necesito ayuda para comprender y solucionar el problema. Quiero dos dígitos de precisión en la salida.

Y también, ¿cómo puedo mejorar este código?

Respuesta

21

Puede utilizar esta:

puts "Your balance is #{'%.02f' % a.rem}" 

Pero recuerda que este código redondeará el resultado si usted tiene más de 2 cifras decimales. Ej .: 199.789 se convertirá en 199.79.

+0

Gracias MurifoX, también me gustaría saber si puedo mejorar mi código de alguna manera. eliminar cualquier código innecesario o algo así? –

+0

Tu código es bueno. Solo necesita separar la lógica en pequeños pedazos de código para que otras personas puedan entenderlo mejor. Recuerde que si la respuesta fue útil, siempre puede aceptarla para ayudar a otras personas. – MurifoX

+0

¿El "0" delante de "2" tiene un significado especial aquí? – sschuberth

6
number_with_precision(value, :precision => 2) 

deben trabajar en los carriles

+0

Hi! Anthony, todavía no estoy sobre raíles, acabo de empezar a aprender ruby ​​pero aprecio tu respuesta, recordaré este código. –

9

Es una falla de diseño fundamental para almacenar dinero como un número de punto flotante porque los flotadores son inexactos. El dinero siempre debe almacenarse como un entero en la unidad de moneda más pequeña.

Imagine dos cuentas con 1.005. Muestre ambos, y de repente hay un centavo extra en el mundo.

En lugar de almacenar la cantidad de dinero en un número entero. Por ejemplo, $ 1 sería balance = 100 o 100 centavos. A continuación, formatee el valor que se muestra:

money = 1000 
"%.2f" % (money/100.0) 
# => 10.00 
+1

Tiene sentido, seguramente lo recordaré. Muchas gracias por compartir tu conocimiento conmigo. –

+0

puedo convertirlo en el flotante sin perder los 2 ceros al final – user4965201

+0

@ user4965201 que no tiene ningún sentido. Un flotador es un número, y podemos estar de acuerdo 5.0 y 5.00 es el mismo número. Cuando visualiza 5.0 en un sitio web, necesita convertir de número a cadena, ya que un número es un concepto abstracto y necesita ser comunicado a través del lenguaje humano, en este caso el texto. – AJcodez

Cuestiones relacionadas