[Résolu][Calc] Cell.SetValue() transforme nombre flottant

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

[Résolu][Calc] Cell.SetValue() transforme nombre flottant

Messagepar kero » 17 Avr 2018 18:36

Bonjour,

J'ai un souci avec une macro qui doit définir le contenu d'une cellule à partir d'un nombre décimal. Le problème est que lorsque j'exécute la macro, le nombre est transformé. Par exemple, si le nombre d'origine est 2,82, le résultat dans la cellule est 2,8199999332428.

Le code que j'utilise est du type :
Code : Tout sélectionner   AgrandirRéduire
Cellule.SetValue(Flottant)

ou :
Code : Tout sélectionner   AgrandirRéduire
Cellule.Value = Flottant


À noter que dans d'anciennes macros, j'ai déjà pu définir le contenu d'une cellule par ce genre de code, mais le flottant venait toujours d'une autre cellule. Jamais eu de problème. Mais maintenant je souhaite introduire un nombre flottant qui vient d'une base de données (extrait par un code de type ResultSet.getFloat(x)). Toutefois, il n'est pas nécessaire qu'il vienne d'une base de donnée, puisque j'ai constaté que le problème se pose même si je définis la variable directement dans le code de la macro, comme dans l'exemple ci-joint.

Voilà voilà... J'ai pas mal cherché sur le sujet mais je trouve rien. Si quelqu'un avait une idée. Merci de m'avoir lu. :)
Pièces jointes
TestFile.ods
(8.7 Kio) Téléchargé 14 fois
Dernière édition par kero le 27 Avr 2018 20:05, édité 1 fois.
Libreoffice 5.4.5.1 (sur Archlinux)
kero
Membre lOOyal
Membre lOOyal
 
Message(s) : 43
Inscrit le : 12 Août 2016 16:44

Re: [Calc] Cell.SetValue() transforme nombre flottant

Messagepar rollmops » 17 Avr 2018 19:14

Bonsoir,
Pourquoi ne pas déclarer ta variable en monétaire ?
Dim TempVar as currency
OpenOffice 4.1.5 - Windows 7
Avatar de l’utilisateur
rollmops
Membre hOOnoraire
Membre hOOnoraire
 
Message(s) : 163
Inscrit le : 20 Déc 2017 15:45

Re: [Calc] Cell.SetValue() transforme nombre flottant

Messagepar Hubert Lambert » 17 Avr 2018 20:30

Bonjour,

Calc ne connaît que le format "double". Donc :
Code : Tout sélectionner   AgrandirRéduire
dim TempVar as double
ou pas de déclaration du tout (le programme convertira en double automatiquement).
Cordialement.
AOOo 4.1.2 sur Win7
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 963
Inscrit le : 06 Avr 2016 08:26

Re: [Calc] Cell.SetValue() transforme nombre flottant

Messagepar kero » 17 Avr 2018 22:11

Bonsoir,

Merci à tous les deux pour vos réponses. La solution avec le type "currency" fonctionne, en revanche avec "double" le même problème demeure. Je ne serais pas contre l'idée de mieux comprendre comment tout ça se goupille.
Libreoffice 5.4.5.1 (sur Archlinux)
kero
Membre lOOyal
Membre lOOyal
 
Message(s) : 43
Inscrit le : 12 Août 2016 16:44

Re: [Calc] Cell.SetValue() transforme nombre flottant

Messagepar kero » 18 Avr 2018 00:22

Bon, en fait la variante en "currency" pose problème aussi. Dans le cas où les données viennent d'une base de données, lors du traitement de certains enregistrement le code transforme mes données (exemple: 3268,43 devient 3268,4299), et dans d'autres cas la valeur d'origine est maintenue.

C'est très curieux...

Pour le moment j'ai trouvé une solution temporaire très sale, qui consiste à convertir la donnée numérique en string, que je passe ensuite en argument pour le SetValue.

J'essayerai de builder un testcase plus complet pour illustration dès que j'aurai l'énergie.
Libreoffice 5.4.5.1 (sur Archlinux)
kero
Membre lOOyal
Membre lOOyal
 
Message(s) : 43
Inscrit le : 12 Août 2016 16:44

Re: [Calc] Cell.SetValue() transforme nombre flottant

Messagepar Hubert Lambert » 18 Avr 2018 08:20

Si tu reçois les valeurs de l'extérieur au format "single", il n'y a pas grand chose à faire (sauf à modifier si possible la définition des tables sources, et encore...).
Dans la mesure où, semble-t-il, la précision d'un "double" n'est pas importante dans ton cas il y a au moins deux solutions :
- passer par la représentation textuelle comme tu le proposes, ce qui n'a rien de vraiment très sale;
- modifier le format numérique de la cellule pour n'afficher que deux décimales.
Cordialement.

PS. Un peu de lecture (en anglais), si tu as les neurones biens accrochés :wink: : https://en.wikipedia.org/wiki/Single-pr ... int_format.
AOOo 4.1.2 sur Win7
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 963
Inscrit le : 06 Avr 2016 08:26

Re: [Calc] Cell.SetValue() transforme nombre flottant

Messagepar kero » 27 Avr 2018 20:04

Hello,

Bon. Je suis retombé sur le même problème mais dans un contexte différent. Je crois comprendre que le problème se situe dans l'utilisation de valeurs "single" - et cela même si les valeurs sont définies localement (ainsi si je cast une valeur externe en string, puis en single), tout en considérant que Libreoffice Basic ne semble pas fournir d'outils pour traiter des nombres définis comme decimals dans la base de données.

Mais tout n'est pas encore parfaitement clair pour moi. Je me demande si je ne devrais pas passer à un langage plus puissant, comme python, pour pouvoir gérer des situations comme celle-là (et même, tout translater en mysql/python). Ne serait-ce que pour la document et le support disponibles.

En tout cas, pour l'instant, la solution la plus propre que j'ai trouvé est d'utiliser la fonction round(nombre, longueur).

Enfin, merci à tous ceux qui m'ont donné leurs suggestions et m'ont permis d'avancer sur le problème.
Libreoffice 5.4.5.1 (sur Archlinux)
kero
Membre lOOyal
Membre lOOyal
 
Message(s) : 43
Inscrit le : 12 Août 2016 16:44


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)