Sto scrivendo una classe per rappresentare il denaro, e un problema che ho incontrato è quello "1.50" != str(1.50)
. str (1.50) equivale a 1.5, e all'improvviso, POOF. 45 centesimi sono spariti e l'importo è ora 1 dollaro e 5 centesimi. non un dollaro e 50 centesimi. In qualsiasi modo potrei impedire a str di farlo, o sto facendo qualcosa di sbagliato? Questo è Python 2 BTW.Mantenere gli zero finali in python
risposta
Quando si lavora con denaro, rappresentano sempre denaro utilizzando la classe Decimal.
Mi picchio :) – Patashu
È possibile utilizzare il metodo format
sulle stringhe per specificare quanti posti decimali si vuole rappresentare:
>>> "{:.2f}".format(1.5)
'1.50'
Ma ancora migliore sarebbe quella di utilizzare il decimal module
per rappresentare il denaro, dal momento che la rappresentazione i problemi con i float binari possono darti risultati leggermente off se stai facendo aritmetica. La documentazione per quel modulo cita alcuni di questi problemi specificamente - uno di quelli più interessanti per le applicazioni Il denaro è:
>>> 0.1+0.1+0.1-0.3
5.551115123125783e-17
>>> from decimal import Decimal
>>> Decimal('.1') + Decimal('.1') + Decimal('.1') - Decimal('.3')
Decimal('0.0')
O semplicemente ""% .2f "% 1.5' – grc
x = 1.500000
print '%.2f' % x
print '{:.3f}'.format(x)
risultato
1.50
1.500
- 1. Mantenere gli zero finali
- 2. Decimale - troncare gli zero finali
- 3. Stampa di zero finali in una QString
- 4. Mantenere zeri finali con diagramma grafico
- 5. Swift - Rimuovi gli zeri finali da Double
- 6. Come stampare zero zero in Python
- 7. rimozione di elementi vuoti finali in Python
- 8. Come rimuovo gli spazi bianchi finali da un QString?
- 9. .format() restituisce ValueError quando si utilizza {0: g} per rimuovere gli zero finali
- 10. Mostra zero decimale finali su input numerico HTML
- 11. In Python, come faccio a contare gli zeri finali in una stringa o in un intero?
- 12. rotonda galleggia giù in Python per mantenere un decimale diverso da zero solo
- 13. Python: Mantenere codice in moduli
- 14. Differenza mercuriale: ignora gli spazi bianchi finali?
- 15. perché gli argomenti predefiniti sono quelli finali?
- 16. Rimuovere gli spazi iniziali e finali?
- 17. Pandas csv-import: mantenere gli zeri iniziali in una colonna
- 18. Mantenere gli elementi avvolti insieme
- 19. Come tagliare gli spazi bianchi finali in Visual Studio 2012?
- 20. In Python piccoli galleggianti tendenti a zero
- 21. MySQL Remove Trailing Zero
- 22. Visualizzazione spazi finali in vim
- 23. Come suddividere (in Python) "tutti tranne gli ultimi n" elementi quando n può essere zero?
- 24. È comune impostare gli oggetti su zero?
- 25. prevenire gli spazi vuoti finali usando le abbreviazioni di vim
- 26. per tagliare gli spazi iniziali iniziali o finali
- 27. Come mantenere in vita gli assembly ASP.NET in AppDomain?
- 28. Come rimuovere gli spazi bianchi finali con sed?
- 29. Rimuovere gli spazi finali automaticamente o con una scelta rapida
- 30. Logstash: Mantenere un valore tra gli eventi
Questo illustra un punto importante: un dollaro e cinquanta i centesimi sono ** non ** equivalenti a, diciamo, 1,5 chili di peso. 1,5 sterline e 1,50 sterline sono esattamente la stessa cosa, e raramente ti importa della differenza tra 1,5 libbre e 1.50001 sterline. Questo perché "sterline" sta misurando una quantità * continua * (peso), mentre "centesimi" sta misurando una quantità * discreta *. –
Un design di classe scadente colpisce ancora ... –