2010-08-04 4 views
2

Lorsque j'insère 78.9 dans Mysql (en utilisant JDBC), il est arrondi à 79? Est-ce normal ... si oui, comment puis-je empêcher cela de se produire?Lorsque j'insère 78.9 dans Mysql (en utilisant JDBC), il est arrondi à 79? Est-ce normal

Plus de détails:

Nom de la colonne: num Type de données: decimal(12,0) * L'article ci-dessus a été copié à partir phpMyAdmin

la requête est

stmt.executeUpdate("INSERT INTO triples(sub_id, pro_id, num) VALUES("+subId+","+proId+",78.9)"); 

Idéalement je voudrais utiliser une variable à la place du codage en dur 78.9

Tels que

 BigDecimal obj = new BigDecimal(78.9); 
+4

Dans quel genre de terrain? –

+0

Afficher le code, la définition de colonne, etc. –

+0

De quel type dispose le champ de base de données et comment l'entrez-vous dans JDBC? –

Répondre

1

Vous devez définir le type de données de la colonne que vous insérez dans comme

float(x,y) 

ou

decimal(x,y) 

où x est le nombre total de chiffres et y est le nombre total de décimales.

e.g. float(5,2) -> 325.46 
    decimal(10,5) -> 42579.12345 
+2

La décimale est parfaitement adaptée à ce cas lorsqu'une précision correcte est spécifiée. Dans de nombreux cas, il est préféré au flotteur. –

+0

J'ai choisi votre réponse parce que même si vous avez mentionné float - il a d'abord souligné le problème principal. Je suis sûr que si j'avais inclus l'édition sur l'utilisation d'un type décimal dès le début, vous auriez réfléchi à cela dans votre réponse. Merci. – Ankur

5

Il est normal parce que l'utilisation de la 0 en décimal (12, 0) dit en substance il devrait y avoir rien après la virgule, il fait le tour. Vous devez spécifier l'échelle pour obtenir ce que vous cherchez. Par exemple, decimal (12,5) autoriserait 7 chiffres à gauche de la virgule et cinq à droite.

 
The declaration syntax for a DECIMAL column is DECIMAL(M,D). 
The ranges of values for the arguments in MySQL 5.1 are as follows: 

M is the maximum number of digits (the precision). 
It has a range of 1 to 65. (Older versions of MySQL permitted a range of 1 to 254.) 

D is the number of digits to the right of the decimal point (the scale). 
It has a range of 0 to 30 and must be no larger than M. 

Voir: http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html

Questions connexes