2010-08-10 6 views

risposta

22

I numeri reali sono migliori per i numeri perché è possibile fare confronti corretti con loro (ad es. Prezzo < 10,0). Tuttavia, presentano problemi di precisione (cose come 3.0 = 2.9999999999). È preferibile utilizzare un tipo Decimal nativo in questo caso, ma in mancanza di questo, vorrei memorizzare i prezzi come un numero intero di centesimi (ad es. 6.77 => 677), quindi dividere per 100 prima di presentare il numero all'utente. In questo modo si ottengono le operazioni con il numero nel database e si ottiene la precisione (supponendo che la precisione di 1 cent è sufficiente).

+1

Questa è una tecnica abbastanza buona. – Eugene

0

La domanda che mi pongo sempre quando considero i tipi di dati stringa o numerici (int, double, ecc.) È "Sto andando a fare i conti con loro?" Se la risposta è sì, che devo presupporre che è nel tuo caso, vado con il valore numerico. Se la risposta è no, scelgo il valore stringa.

1

Con le informazioni fornite, sembra preferibile utilizzare solo un numero intero, in modo da poter ordinare e interrogare con valori numerici anziché con valori di stringa. Un int sarebbe migliore di un punto fluttuante in quanto non ha strani problemi di mezzo centesimo.

es., Non si desidera che 6.77 sia maggiore di 12.54, né si desidera qualcosa con il prezzo 6.4312313141.

2

C'è una spiegazione dettagliata delle soluzioni di "buone pratiche" per questa domanda in this SO question. Usare gli interi è anche un'alternativa accettabile. Indipendentemente da ciò, è meglio usare la stessa soluzione per tutta la tua applicazione per facilitare il confronto e l'aritmetica.

Ricordare che è sempre possibile modificare l'aspetto dei dati prima di presentarli all'utente, utilizzando number_format() o altro.

7

Né è appropriato.

I prezzi devono essere memorizzati come DECIMALE o INT, perché hanno un numero fisso di punti decimali. Usare i float non è una buona idea in quanto i valori verranno arrotondati. Le stringhe sono problematiche perché non sarete in grado di fare confronti.

0

Personalmente preferisco i numeri interi per memorizzarlo come valore in centesimi, 650 invece di 6.50. Facile smistamento, nessun problema di arrotondamento e facile visualizzazione in qualsiasi formato per gli utenti.

0

È possibile controllare il progetto Time and Money su sourceforge. Piena divulgazione: non ho in effetti guardato molto al progetto, ma sembra che ti dia delle buone idee su come gestire tali cose.

Problemi correlati