realbasic-nug.fr
[Top] [All Lists]

Re: text 2 num

To: REALbasic NUG French <realbasic-nug dot fr at lists dot realsoftware dot com>
Subject: Re: text 2 num
From: Michel LO <michel dot lo at albireo dot biz>
Date: Wed, 19 Mar 2008 19:50:02 +0100
Delivered-to: listarchive at realsoftware dot com
Delivered-to: realbasic-nug dot fr at lists dot realsoftware dot com
References: <F6B42B3C-0BFF-4EF8-9FB1-C2A3E370F63E at mac dot com> <37DD881D-5707-46B5-AE92-220CF436A88E at mac dot com> <13DFCF5E-D2A9-4E39-AEC3-E85AF00E29FF at mac dot com> <46F075EB-29A0-4CB2-AB8A-44E4B0A91862 at mac dot com> <C49724C5-25B9-4ACC-A3B8-EE43F145451E at cretaux dot fr> <B02F7DA9-6836-44F9-8D52-3448FED34D0C at mac dot com> <E1C94FF7-6028-4ABF-9A32-E174725495B0 at cretaux dot fr> <A091328A-FAE4-42F4-9263-A68CE457299E at mac dot com> <DB5B4117-8DE5-4B2C-B9E4-EC35289BC1BC at wanadoo dot fr> <1CBF0D45-48BA-4A5D-9FC0-B92DF07CD1FB at mac dot com>
Bonsoir,

Je fais une petite digression sur les problèmes d'arrondi avec les nombres entiers. Ce n'est pas très simple à comprendre, car cela résulte de la représentation qui se fait suivant un processus de mantisse et caractéristique (norme IEEE754).

la caractéristique (ou exposant) est la puissance de 10 et la mantisse donne les chiffres avec le premier chiffre significatif derrière la virgule.

Pour un nombre en simple précision, on a 32 bits, avec un bit pour le signe, 8 pour l'exposant, et 23 pour la mantisse. Avec des puissances de 2 sur 23 bits, on commence à avoir une incertitude sur le 7ème chiffre, et on peut coder entre 2.10^-38 et 2.10^38 (avec le signe sur un bit séparé)

En double précision, on est sur 64 bits. Toujours 1 pour le signe, mais 11 pour l'exposant et 53 pour la mantisse. L'imprécision arrive sur le 16ème chiffre et on peut coder de 2.10^-308 et 2.10^308

======================
Pour la représentation du nombre, il est logique de tout avoir sous une forme fixe du style 130.0 et 134.4 Si on est avec des euros par exemple, on met plutôt 130.00 et 134.40 . on obtient facilement ce qu'on veut avec un format.

Ensuite, la manipulation se fait facilement avec les expression régulière.
a) la chaine à examiner est celle qui sort du format
b) la chaine de comparaison est (.*)\.00$
c) la chaine résultante est \1

Explication : la chaine de recherche (.*) veut dire n'importe quelle chaine de caractère et la parenthèses permettent de la repérer par \1 (premier groupe entre parenthèses). La chaine \.00$ veut dire un point suivi de deux 0 en fin de ligne. Donc l'ensemble veut dire = "ranger dans le groupe 1 tout ce qui se trouve avant la fin de ligne .00

S'il trouve la fin de ligne .00 on a un résultat avec le .00 strippé, sinon, on a toute la chaine.

On peut aussi mettre pour la chaine de recherche (.*)\.0*$ pour stripper un point suivi de n'importe combien de 0 après le point et en fin de ligne. Si on veut enlever des virgules, il suffit de remplacer le \. par , (on met le \ pour que le . qui veut dire "n'importe quel caractère" soit "échappé" en "caractère point"

=====================
Je conseille de mettre cette manip dans une fonction à vous genre monformat(var_cdbl) avec un résultat string



Michel Lo
BELT
45, rue Aristide Briand
92300 LEVALLOIS-PERRET

L'intégrité de ce message n'étant pas assurée sur internet, BELT ne peut être tenue responsable de son contenu. Toute utilisation ou diffusion non autorisée est interdite. Si vous n'êtes pas destinataire de ce message, merci de le détruire et d'avertir l'expéditeur.

The integrity of this message cannot be guaranteed on the Internet. BELT can not therefore be considered responsible for the contents. Any unauthorized use or dissemination is prohibited. If you are not the intended recipient of this message, then please delete it and notify the sender.



Le 19 mars 08 à 19:03, Arnaud Nicolet a écrit :

Mon avis:

Format est bien, mais on ne peut pas avoir facilement une fonction qui affiche "199.4" et "130" (pour 199.4 et 130, donc). On a soit "- #" qui donne "199" et "130", soit "-#.0" qui donne "199.4" et "130.0" ou alors, le pire, "-#.#" qui donne "199.4" et "130.". Mais pour afficher les nombres à virgules avec la partie décimale et les nombres entiers sans la virgule, il faut d'abord comparer si x=round(x) , mais je crois que c'est même pas si simple (ça renvoie toujours faux).

Le 19 mars 08 à 18:26 (soir), Jacques Chanliau a écrit:

Je profite de cette discussion pour vous faire part d'une petite mésaventure qui peut vous être utile. J'utilisais cdbl ou val pour exporter des valeurs d'une listbox (mais le problème serait le même à partir d'un EditField) vers un fichier excel. Les résultats sur excel étaient différents de ceux trouvés sur RealBasic. En effet, dès que le nombre à exporter est supérieur à 100000, il est arrondi à une décimale: par exemple, 111111,11 donnera 111111,1. Il est donc impératif ici d'utiliser format ("-#.00") pour obtenir le bon résultat. J'ai fait un rapport de bug à ce sujet, mais RB, ainsi que pas mal de monde sur la liste américaine, m'ont répondu que c'était normal.
En remplaçant mes cdbl par format, tout fonctionne normalement.




<Prev in Thread] Current Thread [Next in Thread>