J'essaie de convertir une valeur double, par ex. 12.55
-BigDecimal
avec ce code:Comment convertir BigDecimal en Decimal correctement?
BigDecimal unitPrice = new BigDecimal(product.getUnitPrice());
En conséquence, je suis quelque chose comme ça 12.550000000000000710542735760100185871124267578125
alors je dois arrondi tout avec ce code:
unitPrice.setScale(2, RoundingMode.HALF_EVEN)
et a obtenu un résultat comme celui-ci 12.55
ce qui est bien. Cependant, quand je vais mettre cela comme un paramètre pour insérer la base de données MySQL avec ce code:
addProduct.setBigDecimal(4, unitPrice.setScale(2, RoundingMode.HALF_EVEN));
Alors quand je le lance, je suis arrivé cette erreur SQL:
Data truncation: Out of range value for column 'price_per_unit' at row 2
Je sais que le problème est dans ce code:
addProduct.setBigDecimal(4, unitPrice.setScale(2, RoundingMode.HALF_EVEN));
comme je l'ai débogué au moment de cette ligne de code, la valeur était
12.550000000000000710542735760100185871124267578125
type MySQL de données de la colonne que j'ai mis était DECIMAL(3,2)
.
Pourquoi ça ne marche pas même quand je l'ai arrondi? J'ai essayé de chercher une solution et je ne trouve rien de pertinent. Comment définissez-vous vraiment la décimale correctement? Je suppose que tu sais ce que j'essaie de faire. Merci d'avance.
Pourquoi ne retourne une valeur à virgule flottante 'product.getUnitPrice()'? C'est le vrai problème. – EJP
@EJP Renvoie réellement le double. –
['double' * est * point flottant] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.2.3) réellement, et c'est toujours le vrai problème. Vous ne devriez pas avoir à arrondir juste pour stocker dans une base de données. N'utilisez pas de virgule flottante pour de l'argent. – EJP