

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
11 messages in org.openoffice.fr.progRe: [prog] Perte de décimale sous OOo...| From | Sent On | Attachments |
|---|---|---|
| Philippe Allart | Apr 14, 2007 4:02 am | |
| Philippe Allart | Apr 14, 2007 4:27 am | |
| Bernard Marcelly | Apr 14, 2007 5:15 am | |
| Philippe Allart | Apr 14, 2007 5:20 am | |
| Philippe Allart | Apr 14, 2007 5:44 am | |
| Bernard Marcelly | Apr 15, 2007 1:30 am | |
| Philippe Allart | Apr 15, 2007 2:53 am | |
| Bernard Marcelly | Apr 16, 2007 3:19 am | |
| Bernard Marcelly | Apr 16, 2007 5:45 am | |
| Philippe Allart | Apr 16, 2007 6:51 am | |
| Philippe Allart | Apr 20, 2007 7:21 am |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | Re: [prog] Perte de décimale sous OOo 2.2? | Actions... |
|---|---|---|
| From: | Philippe Allart (pall...@cudl-lille.fr) | |
| Date: | Apr 15, 2007 2:53:43 am | |
| List: | org.openoffice.fr.prog | |
Bonjour,
Tout d'abord un grand merci pour ce long développement qui clarifie énormément les règles de conversion dans OOoBasic.
Bernard Marcelly a écrit :
A mon avis le problème est d'abord une mauvaise conception du programme. Il faut faire attention aux conversions implicites, et éviter les conversions inutiles.
Dans mon cas, ce n'est pas vraiment inutile. J'essaie de développer un jeu de fonctions génériques qui recoivent une string en paramètre et la renvoient à des fonctions plus spécifiques qui réclament une string, un double, ou une date. Cette fonction générique peut être appelée indiféremment par une application qui elle manipule nativement string, double ou date. Le format string intermédiaire sert juste à mettre en place une couche d'abstraction.
Par contre j'ai effectivement eu tord de me fier à la conversion implicite, puisque je peux parfaitement l'éviter.
Par contre, je tiens à insister sur le fait que l'application fonctionne parfaitement sous OOo 2.1, et que les arrondis sont apparus avec la 2.2. Il y a quelque chose qui a changé.
Chaque routine de conversion : implicite, CDbl, Val, a ses propres particularités. Exemple :
dim d as double, s as string, v as variant s = "123 4 56.78" d = s ' conversion implicite v = Val(s) ' conversion explicite print v, typeName(v), d
L'espace est non significatif pour Val, alors qu'il indique la fin du nombre pour la conversion implicite. CDbl déclenche une erreur s'il trouve un espace.
La combinaison de Str et Val ne donne pas une fonction identité. Preuve: print "resultat" & Str(Val("+ 123, 4,,56.78")) Str affiche un espace devant un nombre positif Val ignore les espaces et les virgules (supposées être des séparateurs de milliers), et utilise le point décimal, quelle que soit la valeur de l'Environnement linguistique.
Le séparateurs de milliers ne sont pas placés n'importe où ni n'importe comment dans le nombre. Il existe des règles syntaxiques.
CDbl tient compte de l'Environnement linguistique: d = CDbl("123,456") print d donne une valeur 123,4565 en Français(France) et 123 en Anglais(USA). D'autre part, CDbl n'accepte pas le caractère + devant le nombre.
Est-ce que ça ne vaut pas le coup d'intégrer ces explications dans la documentation d'OOo? Tout celà n'a rien d'intuitif.
CDbl ne renvoie pas n'importe quoi mais peut surprendre: d = CDbl("1.7") print Str(d), CDate(d) Le CDbl a converti l'argument en : 39264. En fait CDbl commence par chercher si l'argument chaîne représente une date. Ici il trouve la date Janvier 2007 et convertit cette date de jour en double. A cause de cette bizarrerie je pense qu'il faut s'abstenir d'utiliser CDbl pour convertir une chaîne pouvant contenir un nombre avec décimales.
L'instruction msgbox(CDbl("12,5")) m'affiche "12" msgbox(CDbl("12.5")) m'affiche "39214".
La documentaion d'OOo dit pour CDbl: "Convertit une expression au format chaîne de caractères ou numérique en valeur de type Double."
Pourquoi CDbl essaie de convertir d'abord en date? Quel est l'intérêt de CDbl si le nombre ne doit pas être décimal?
Est-ce que ça ne vaudrait pas le coup de classer les fonctions Str, Val et CDbl dans la catégorie "depreciated", et d'en faire d'autres qui auraient un comportement plus partiate mais plus intuitif et plus symétrique?
On peut s'accomoder de ces petites aspérités pour de petites macro de type "support", mais pas pour des applications dont la taille devient critique, surtout si ces comportements ne sont pas parfaitement spécifiés dans la doc, et si ils peuvent même très légèrement varier d'une version à l'autre comme ça semble le cas entre la 2.1 et 2.2.
Je suppose qu'il y a eu de longs débats sut cette question. Comment peut-on participer à l'effort sur ce point précis?
Bon dimanche,
Ph.
-- Philippe Allart Chargé dee mission TIC Lille Métropole







