Bonjour
Firebird accepte-il les notations scientifique du type 1.5x10-3 ou 1.5e-3 ?
comment les stocker ? comment caster ces valeurs si elles sont stockées en varchar ?
merci
Benoît
Bonjour
Firebird accepte-il les notations scientifique du type 1.5x10-3 ou 1.5e-3 ?
comment les stocker ? comment caster ces valeurs si elles sont stockées en varchar ?
merci
Benoît
Si vous voulez les restituées tel qu'elles ont été entrées (et non la valeur dans un double précision) il vous faudra les mettre en effet dans un varchar.
Par contre vous ne pouvez pas les castez en double précision car ce n'est pas du numérique, c'est une notation mathématique. Il faut l'interpréter et donc faire un calcule pour en optenir une valeur, ce qui est bien plus compliqué qu'un simple passage d'un type à un autre.
Donc il vous faut un interpréteur. Je sais que dans l'UDF rfunc il y a un interpreteur d'expression mais je ne sais pas s'il peut interpréter les notations scientifiques. A vous de tester. Sinon l'autre solution c'est de créer une colonne supplémentaire de type double et lorsque que vous mettez à jour/insérez une nouvelle valeur vous enregistrez dans le varchar la notation scientifique et dans le double la valeur (que vous aurez fait calculé par votre langage de programmation). Enfin dernière solution (la plus difficile) créez votre propre UDF qui interprettera le varchar pour en donnez la valeur de type double précision.
J'ai pourtant fait les essais suivants :
datachar => dataDblePrec = cast(datachar as Double precision)
1 => 1.000
1.5 => 1.500
1 000 000 000 => 1 000 000 000.000
1e150 => 1E150
-2E200 => -2E200
Les calculs du type sum, avg ... sont réalisables sur l'attribut dataDblePrec .
Bien sur, dès que du texte est rentré dans l'attribut datacahe, la conversion n'est plus possible. Mais il semble que ces valeurs peuvent être castées en double precision.... (je travaille sous Firebird 1.5).
Je pourrai donc faire des calculs sur le champ datachar après l'avoir casté bien sûr.
A moins que cela ne cache quelque chose .... qu'en pensez vous ?
Oui mais je répète ce que j'ai dit : Si vous souhaitez restituer (donc à l'affichage) ce qui a été saisie, le double précision n'est pas adapté il vous faudra garder votre varchar.
Sinon 1E9 enregistré dans un double précision sera affiché 1 000 000 000.
Ensuite vous avez donné en exemple 1.5x10-3 qui ne poura pas être casté. D'où mon explication sur l'interpreteur d'expressions.
Donc si vous gardez votre varchar, avant d'enregistrez dans la base assurez vous que vous pourrez le caster en double précision (et pourquoi pas dans ce cas l'enregistrer dans une colonne séparée (comme ca vous faites le cast qu une seule fois et celà vous permet de vérifier que ca se passe bien). La colonne varchar ne vous servant qu'à des fins de présentations.
Ok. Je comprends mieux...
Je n'ai jamais utilisé d'UDF. Je vais essayer de voir comment cela fonctionne.
Merci du coup de main
Benoît
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager