web-dev-qa-db-fra.com

Plus gros double / flotteur possible pour une colonne de ma base de données MySQL

Je développe un PHP application dans laquelle je dois stocker des valeurs plus grand que 1 million, mais avec la flexibilité d'avoir des points flottants. Je connais le flotteur traditionnel et double. Je cherche à Conservez seulement jusqu'à deux points décimaux et ne gérera que des opérations avec des chiffres contenant 2 décimales exclusivement.

J'ai choisi mon type de colonne de double et non signé, mais chaque fois que je stocke une rangée avec une valeur plus grande d'un million, il est tronqué à 9999999,99

Pourquoi est-ce? Je cherche le bon type de données/solution. Si vous pouviez me diriger dans la bonne direction, j'apprécierai beaucoup!

Merci pour votre temps à l'avance!

Acclamations.

2
idelara

N'utilisez pas (m,n) À la fin de FLOAT ou DOUBLE. Qui provoque une arrondi (en bas) ou une troncature (en haut). Si vous voulez (m,n), Vous probablement devrait utiliser DECIMAL(m,n).

FLOAT stocke 24 significatifs bits de données (équivalent à environ 7 chiffres décimaux; stockage = 4 octets), avec un exposant allant sur environ 10 ** +/- 38.

DOUBLE stocke 53 bits (environ 16 chiffres, 8 octets) et a une gamme énorme.

Votre question est vague - vous stockez "argent"? Si oui, alors vous vraiment devrait Utilisez DECIMAL(m,2). m = 8 vous permet de stocker jusqu'à un million de dollars (ou euros, etc.). Mais m peut être aussi gros que vous le souhaitez. (N'oubliez pas de soustraire le 2 avant de voir à quel point les chiffres peuvent être importants.) (14,2) Stockerait jusqu'à un milliard de dollars, avec précision au centime. Cela prendra 8 octets de stockage.

5
Rick James

Les numéros de points flottants ne sont pas toujours stockés comme vous le souhaiteriez , en raison de la manière dont les CPU traitent des numéros de points flottants.

Si vous stockez toujours des chiffres contenant 2 points décimaux, rangez-le comme un entier et ajoutez le point décimal dans la couche de présentation.

1
Philᵀᴹ