Je stocke des valeurs dans une colonne définie comme float. Lorsque je relis ces valeurs de la base de données, elles diffèrent parfois beaucoup plus des valeurs d'origine que je ne le pensais (je sais que float ne stocke pas les valeurs exactes, jetez un oeil à l'exemple pour voir ce que je veux dire).Quelles sont les règles utilisées par MySQL pour afficher les valeurs flottantes?
Voici mon cas de test:
drop table if exists float_test;
create table float_test (value1 float(8, 3), value2 float);
insert into float_test values (11743.85, 11743.85);
select mt.*, round(mt.value1, 6), round(mt.value2, 6) from float_test mt;
Les résultats de la sélection sont les suivants:
mysql> select mt.*, round(mt.value1, 6), round(mt.value2, 6) from float_test mt;
+-----------+---------+---------------------+---------------------+
| value1 | value2 | round(mt.value1, 6) | round(mt.value2, 6) |
+-----------+---------+---------------------+---------------------+
| 11743.850 | 11743.8 | 11743.849609 | 11743.849609 |
+-----------+---------+---------------------+---------------------+
1 row in set (0.01 sec)
Comme vous pouvez le voir, la sélection des résultats valeur2 à 11743,8 alors que la sélection ronde (valeur2, 6) se traduit par une valeur qui est beaucoup plus proche de celle que j'ai mise à l'origine. Aussi, si vous
vous pouvez voir t Les valeurs stockées dans value1 et value2 sont effectivement égales. Donc je pense que c'est juste une question de comment les résultats sont affichés. En parcourant la documentation de MySQL, je n'ai trouvé aucune règle indiquant comment les valeurs flottantes sont arrondies automatiquement pour l'affichage.
Maintenant, j'ai des questions tow:
1. Quelles sont les règles que mysql utilise pour afficher les valeurs flottantes?
2. Existe-t-il un moyen (par exemple, certaines options de configuration) de récupérer la valeur qui n'est pas arrondie à la première décimale sans modifier ma définition de table et sans modifier mon instruction select? J'ai testé cela sur MySQL 4.0, 5.0 et 5.1.
Merci,
Stefan