Voglio memorizzare 3.50 in una tabella mysql. Dispongo di un float in cui lo memorizzo, ma memorizza come 3.5, non 3.50. Come posso avere lo zero finale?memorizzando importi in mysql
risposta
Non conservare valori monetari come float, utilizzare decimale o tipo numerico:
Documentation for MySQL Numeric Types
EDIT & precisazione:
valori Float sono vulnerabili a errori di arrotondamento sono che hanno limitato la precisione in modo meno non ti importa che ottieni solo 9,99 invece di 10,00 dovresti usare DECIMAL/NUMERIC dato che sono numeri a virgola fissa che non hanno tali problemi.
Ha davvero importanza se archivia come 3,5, 3,50 o addirittura 3,500?
Ciò che è veramente importante è come viene visualizzato dopo che è stato recuperato dal db.
O mi manca qualcosa qui?
Inoltre, non utilizzare un float, utilizzare un decimale. Float ha tutti i tipi di problemi di arrotondamento e non è molto grande.
Perché si desidera memorizzare "3.50" nel database? 3,5 == 3,50 == 3,5000 per quanto riguarda il database.
La presentazione e la formattazione di figure/date/ecc. Devono essere eseguite nell'applicazione, non nel database.
Se si utilizzano i tipi DECIMALE o NUMERICO, è possibile dichiararli come ad esempio DECIMAL (18, 2) che imporrebbe 2 decimali anche se fossero 0. A seconda di quanto grandi valori si prevede, è possibile modificare il valore del valore primo parametro.
Per memorizzare i valori è possibile utilizzare un DECIMAL (10,2) campo, quindi è possibile utilizzare la funzione FORMAT:
SELECT FORMAT(`price`, 2) FROM `table` WHERE 1 = 1
non è generalmente una buona idea per memorizzare i soldi come un galleggiante di arrotondamento gli errori possono verificarsi nei calcoli.
Prendere in considerazione l'utilizzo di DECIMAL (10,2).
Anche i numeri come 0.1 e 0.2 sono impossibili da rappresentare in virgola mobile binario, indipendentemente dalla precisione. http: //en.wikipedia.org/wiki/floating point – Ray
Il file binario non può rappresentare con precisione i punti mobili con un numero limitato di bit. Non è la perdita così muuch dei dati, ma in realtà gli errori di conversione .. Here's the manual giving examples
È possibile vedere in azione nel browser, vedere di persona in questo frammento di codice.
<script>
var floatSum = 0;
// add 0.1 to floatSum 10 times
for (var i=0; i<10; i++) {
floatSum += 0.1;
}
// if the repetative adding was correct, the floatSum should be equal to 1
var expectedSum = 10*0.1; // 1
// you can see that floatSum does not equal 1 because of floating point error
document.write(expectedSum + " == " + floatSum + " = " + (expectedSum==floatSum) + "<br />");
// --- using integers instead ---
// Assume the example above is adding £0.10 ten times to make £1.00
// With integers, we will use store money in pence (100 pence (also written 100p) in £1)
var intSum = 0;
// add 0.1 to floatSum 10 times
for (var i=0; i<10; i++) {
intSum += 10;
}
// if the repetative adding was correct, the floatSum should be equal to 1
var expectedSum = 10*10; // 100
// you can see that floatSum does not equal 1 because of floating point error
document.write(expectedSum + " == " + intSum + " = " + (expectedSum==intSum) + "<br />");
document.write("To display as £ instead of pence, we can divide by 100 (presentation only) : £" + intSum/100 + "<br />");
</script>
- 1. memorizzando il valore negativo in mysql
- 2. memorizzando upvotes/downvotes in mongodb
- 3. API PayPal: i totali degli importi degli articoli del carrello non corrispondono agli importi dell'ordine
- 4. memorizzando i dati localmente sull'iPhone
- 5. memorizzando i numeri come varchar
- 6. In Python, cosa succede quando importi all'interno di una funzione?
- 7. Espressione regolare per corrispondere agli importi in dollari
- 8. Memorizzando dati statistici, ho bisogno di DECIMAL, FLOAT o DOUBLE?
- 9. Java sta "memorizzando nella cache" classi anonime?
- 10. memorizzando dati binari su cassandra proprio come il file binario MYSQL BLOB
- 11. Android: memorizzando nome utente e password?
- 12. C++ memorizzando un valore in una coppia non ordinata
- 13. In che modo tutti stanno memorizzando le stringhe di connessione?
- 14. Come arrestare Excel memorizzando il percorso assoluto di un XLA?
- 15. Come creare mappe offline (utilizzando OSM opuscoli), memorizzando nella cache?
- 16. Chrome sta memorizzando nella cache una richiesta HTTP PUT
- 17. C++ Memorizzando il tipo dell'oggetto, quale scelta è migliore?
- 18. Select-locking in Rails con MySQL
- 19. Problemi di arrotondamento con l'allocazione di importi in dollari su più persone
- 20. Se ti importi in Python, perché non ottieni un ciclo infinito?
- 21. Come "ibernare" un processo in Linux memorizzando la sua memoria su disco e ripristinandola in seguito?
- 22. memorizzando più di 255 caratteri in un DB PostgreSQL su heroku
- 23. memorizzando enormi quantità di dati di serie temporali in derivati bigtable
- 24. Sicurezza Javascript: sta memorizzando i dati sensibili in una funzione auto-invocante più sicura dei cookie?
- 25. Raddoppia i miei soldi: il mio framework usa i doppi per gli importi monetari
- 26. mysql dichiarazioni preparate in modo permanente
- 27. Memorizzazione di valori esadecimali come binari in MySQL
- 28. Come memorizzare la stringa JSON in MySQL db
- 29. Come posso dire dove MongoDB sta memorizzando i dati? (non è l'impostazione predefinita/data/db!)
- 30. Modifica max_connect_errors in MySQL
lo faccio parlare il problema di arrotondamento. Il punto è che non dovrebbe preoccuparsi di come viene memorizzato ma di come viene visualizzato. Non archiviare le informazioni finanziarie a 2 cifre decimali: i tassi di cambio sono a 5 e vengono archiviati a 6, ma vengono visualizzati solo come 2. –
(commento irrilevante precedente cancellato). +1 per un buon punto sull'arrotondamento. –