2010-12-01 21 views
3

Ich habe ein Django-Modell mit einem Feld für Preis:Django: Erlaube ein FloatField oder ein IntegerField in einem Eingabeformular?

class Book(models.Model): 
    title = models.CharField(max_length=200) 
    price = models.FloatField(null=True, blank=True) 

Das Problem ist, dass meine Benutzer möglicherweise einen Preis als 245 oder als 245.00 eingeben, und ich möchte das System entweder zu handhaben zu können.

Kann ich etwas cleveres tun, um dies zu ermöglichen?

+1

Und es funktioniert nicht? 'float (245)' ist '245.00' ... –

Antwort

4

Ich verstehe nicht, warum Sie überhaupt etwas tun müssen. Ein Float muss keine Fließkomma-Komponente haben - 245 ist genauso ein Float wie 245.00.

Ich würde zweiten Maikhoepfel Empfehlung, dass Sie nicht Schwimmer für Preise verwenden, obwohl. Fließkomma kann bestimmte Dezimalwerte nicht genau darstellen - dies ist eine Einschränkung des IEEE-Fließkomma-Algorithmus. Ich würde jedoch empfehlen, stattdessen DecimalField zu verwenden, da dies ideal für Werte mit einer festen Anzahl von Dezimalstellen ist, wie Preise.

+0

Genau was ich brauche. Vielen Dank! – AP257

0

Best Practices im Umgang mit Preisen schreiben normalerweise vor, dass Sie ein IntegerField trotzdem verwenden sollten, weil Sie andernfalls auf funky Rundung/begrenzte Präzisionsfehler stoßen könnten. Teilen/multiplizieren Sie einfach mit 100.

+0

-1: In django gibt es in diesem Fall ein models.DecimalField. –

Verwandte Themen