OVH Cloud OVH Cloud

BUG SQL QUERY ANALYSER

2 réponses
Avatar
BRIG
Bonjour,


En ex=E9cutant ceci :

create table TheBug ( r real, f float )
insert into TheBug values (22.3, 22.3)
select * from TheBug
drop table TheBug

J'ai l'affichage suivant :

R F
22.299999 22.300000000000001

Merci de votre r=E9ponse.


Brig

2 réponses

Avatar
bruno reiter [MVP]
real et float sont des types de donnée "approximatifs" et ne sont fait que pour
des calculs scientifiques, pour de l'exact, prends du decimal ou numeric

br

"BRIG" wrote in message
news:094501c3d448$aceccdc0$
Bonjour,


En exécutant ceci :

create table TheBug ( r real, f float )
insert into TheBug values (22.3, 22.3)
select * from TheBug
drop table TheBug

J'ai l'affichage suivant :

R F
22.299999 22.300000000000001

Merci de votre réponse.


Brig
Avatar
Fred BROUARD
il ne s'agit nullement d'un bug, mais d'un comportement normal et sain
d'un système informatique.

Les calculs au sein d'un ordinateurs sont, du fait de la conception
binaire, exécuté en base 2. Or pour les chiffres après la virgule, il
n'existe aucune correspondance systématique de précision. En effet 0.2
(décimal) s'exprime, en base 2, à l'aide d'une suite infinie de
puissance inverses de 2. Lors de la récupération de cette information
l'affichage be fait que confirmer cet état de fait.
Si l'on veut conserver exactement la précision décimale (par exemple
pour des informations comptable) il faut utiliser un décimal codé
binaire, c'est à dire le type SQL DECIMAL par exemple. L'inconvénient
est que le SGBDR effectue une conversion en binaire avant tout calcul.

C'est le comportemant normal de tous SI, ordinateur et SGBDR, même
d'Acces. Le seul handicap d'access en la matière est de masquer cela et
de ne pas permettre le type DECIMAL.

Un peu de connaissance et de culture informatique sur les bases de
données et le SQL me parait nécessaire avant d'affirmer péremptoirement
que SQL Server déconne !

Pour t'offrir un premier vernis culturel, tu peut consulter mon site,
comme lire mon bouquin !!!

A +


--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
BRIG a écrit:
Bonjour,


En exécutant ceci :

create table TheBug ( r real, f float )
insert into TheBug values (22.3, 22.3)
select * from TheBug
drop table TheBug

J'ai l'affichage suivant :

R F
22.299999 22.300000000000001

Merci de votre réponse.


Brig