2012-08-02 20 views
11

Ecco il mio codiceCome visualizzare uscita con due cifre di precisione

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}" 

e la mia uscita è

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

come si può vedere l'uscita, 'La bilancia è 1899,5' visualizza solo uno cifra di precisione. Ho bisogno di aiuto per capire e risolvere il problema. Voglio due cifre di precisione nell'output.

E come posso migliorare questo codice?

risposta

21

È possibile utilizzare questo:

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

Ma ricordate che questo codice sarà arrotondare il risultato se si dispone di più di 2 cifre decimali. Es .: 199.789 diventerà 199.79.

+0

Grazie MurifoX, vorrei anche sapere se potrei migliorare il mio codice in qualche modo? rimuovere qualsiasi codice non necessario o qualcosa del genere? –

+0

Il tuo codice è buono. Basta separare la logica in piccoli pezzi di codice in modo che altre persone possano capirlo meglio. Ricorda che se la risposta è stata utile, puoi sempre accettarla per aiutare altre persone. – MurifoX

+0

Lo "0" iniziale davanti a "2" ha un significato speciale qui? – sschuberth

6
number_with_precision(value, :precision => 2) 

dovrebbe funzionare in Rails

+0

Ciao! Anthony, non sono ancora su binari, ho appena iniziato ad imparare il ruby ​​ma apprezzo la tua risposta, ricorderò questo codice. –

9

È un difetto di progettazione fondamentale per archiviare il denaro come numero in virgola mobile perché i float sono inesatti. Il denaro dovrebbe essere sempre archiviato come numero intero nella più piccola unità di valuta.

Immagina due account con 1.005. Visualizzali entrambi e all'improvviso c'è un soldo in più nel mondo.

Memorizzare invece la quantità di denaro in un numero intero. Ad esempio, $ 1 sarebbe balance = 100 o 100 centesimi. Quindi formattare il valore visualizzato:

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

Ha senso, lo ricorderò sicuramente. Grazie mille per aver condiviso la tua conoscenza con me. –

+0

posso convertirlo in float senza perdere 2 zeri alla fine – user4965201

+0

@ user4965201 che non ha alcun senso. Un float è un numero e possiamo accettare 5.0 e 5,00 è lo stesso numero. Quando visualizzi 5.0 su un sito Web, devi convertire da numero a stringa, poiché un numero è un concetto astratto e deve essere comunicato tramite il linguaggio umano, in questo caso il testo. – AJcodez

Problemi correlati