Convertir un double en entier

Résolu
cs_epson1 Messages postés 89 Date d'inscription dimanche 12 novembre 2000 Statut Membre Dernière intervention 29 mars 2013 - 17 mars 2013 à 16:20
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 17 mars 2013 à 19:23
Bonjours a tous,
j'ai un petit probleme non pas de prog mais de math pur (j'espere avoir posté au bon endroit ,

sinon veuillez m'en excuser).
j'expose :
je lis un fichier qui contient les coordonnées des vertex d'un dessin vectoriel (fichier *.STL pour

ceux qui connaissent) et je charge ces coordonnées dans un tableau .
Toutes ces infos sont des double et je voudrais les transformer en integer pour les envoyer vers

une machine qui n'accepte que des entiers de 32768 a -32767 .
Or Cint() ne convient pas car cela induit une perte de precision du a l'arrondi et le tracé est

deformé .

J'ai donc essayé cela :


Public Function Dbl_Vers_Int(ByRef Nombre As Double) As Integer
Dim Temporaire As Double


'on ne peux pas multiplier un trop grand double sinon depassement de capacité
'donc


        Temporaire = Round(Nombre, 3) 'on ne garde que 3 décimales
Temporaire = Temporaire * 1000 'on multiplie par 1000

Dbl_Vers_Int = Temporaire

End Function



Mais le probleme c'est que de cette maniére j'ai des nombres qui dépassent largement les

limites d'un entier et si je re divise , je perds ce que je viens de gagner en précision .
Donc la question est : comment convertir un double en entier sans perte de précision et en

gardant l'echelle du dessin .
J'espére avoir été clair sur l'exposé du probleme , sinon n'hésitez pas a demander des

précisions .
Je suis sous VB6 PRO et j'ai épluché tous les post et forum depuis deux semaines .
Merci d'avance pour toutes les pistes que vous pourrez me soumettre .

10 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 mars 2013 à 19:16
Le format 3 est tel que sont acceptés, sans aucune conversion, tous les nombres de type double (entiers ou décimaux) , entre, toutefois, ces deux bornes (limites de ta machine) :
- 1 073 741 824 à 1 073 741 823 inclus


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 mars 2013 à 16:45
Bonjour,
comment convertir un double en entier sans perte de précision et en gardant l'echelle du dessin
.
Bonjour,
- aucun problème si pas de précision décimale ===>> transformer en long par clng
- si décimales ===>> multiplier par 10^x (ou x = nombre de décimales) ==>> et typer en long ===>> mais si tu veux retrouver la précision sur la machine qui n'accepte que des entiers, je ne vois pas comment, puisqu'il faudrait ensuite diviser en sens inverse et que la division comporterait des décimales pour rester précise !
Drôle de question et drôle de machine et drôle de calcul qui se voudrait "précis" sans conserver la précision !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 mars 2013 à 16:49
Ah oui ! Ma réponse, bien entendu, tient compte de ce que tu as bel et bien dit que tu voulais ne pas changer d'échelle, hein ...
Car la chose serrait bien évidemment possible, mais en changeant d'échelle (or, tu n'en veux pas !).
Maintenant : si toi, tu es capable de partager une poire en 3 poires entières, donne-moi le nom du magicien qui t'a instruit.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_epson1 Messages postés 89 Date d'inscription dimanche 12 novembre 2000 Statut Membre Dernière intervention 29 mars 2013
17 mars 2013 à 17:31
Merci , ucfoutu , pour ta réponse .j'ai bien compris mais il existe des progs commerciaux qui le font mais je ne sais pas comment .Par contre je viens de réaliser que la machine doit accepter des entiers réels , voici ce que dit la notice :

Numeric values used in the parameter field are in one of the following four formats.
(1) Integer-integers between -2^30 and 2^30 -1. Real numbers specified for a parameter that should be an integer are
rounded to the nearest integer.
(2) Clamped integer- integers between -32768 and 32767. Values outside this range are converted to the nearest
integer within the range. Real numbers are rounded to the nearest integer.
(3) Real - real numbers between -2^30 and 2^30 -1.
(4) Clamped Real - real numbers between -32768 and 32767. Values outside this range are converted to the
nearest real number within the range.

je pense que la solution N° 1 est un Long en VB , qu'en dis tu ? Je suis nul en math et j'essaye de comprendre.
Encore merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 mars 2013 à 18:06
il existe des progs commerciaux qui le font

Désolé mais je ne connais pas le miracle mathématique qui ferait que l'on garde la précision de numériques décimaux tout en les transformant en entiers et sans changer d'échelle
Et cet "aspect" là n'a rien à voir avec le développement et tout avec la seule raison !
je pense que la solution N° 1 est un Long en VB

ouvre donc ton aide VB6 sur le mot Long (type) et tu auras cette réponse, hein (lis ma signature).
Puis relis donc le format 3) déclaré comme accepté sur ta notice , puis ceci :
Tapez le texte de l'url ici.
et cela :
Tapez le texte de l'url ici.
Puis ce que tu as écrit dans ton message :
une machine qui n'accepte que des entiers de 32768 a -32767

Et cherche tes contradictions
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_epson1 Messages postés 89 Date d'inscription dimanche 12 novembre 2000 Statut Membre Dernière intervention 29 mars 2013
17 mars 2013 à 18:56
Oui je me suis mal exprimé. En fait je me disais que puisque la machine semble accepter des longs , sa serait peut être plus facile de convertir des doubles en long en multipliant les doubles par 1000 par ex puis convertir en long. On garde ainsi de la précision. Mais le problème c'est l'échelle et dans le tableau , les doubles n'ont pas toujours de décimales et que ce nombre (même sans décimale) peut être très grand , donc dépasser la capacité d'un long.
En fait l'exercice consiste a prendre les données numériques (double) d'un fichier CAD au format .STL et de les envoyer a la machine dans l'un des quatre formats compatibles cités plus haut. Le problème c'est que je n'arrive pas a effectuer ces conversions.
0
cs_epson1 Messages postés 89 Date d'inscription dimanche 12 novembre 2000 Statut Membre Dernière intervention 29 mars 2013
17 mars 2013 à 18:57
Que me conseillerait tu ?
Merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 mars 2013 à 19:07
et de les envoyer a la machine dans l'un des quatre formats compatibles cités plus haut. Le problème c'est que je n'arrive pas a effectuer ces conversions.

L'un des 4 formats accepté est défini en format 3) (qui n'est pas limités aux entiers, comme tu aurait pu l'apprendre en lisant les deux liens que je t'ai invité à lire)
Aucune conversion nécessaire.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_epson1 Messages postés 89 Date d'inscription dimanche 12 novembre 2000 Statut Membre Dernière intervention 29 mars 2013
17 mars 2013 à 19:21
AHH je n'avais pas compris que les réels peuvent avoir une virgule (j'ai lu en diagonale la première fois , et en anglais ...)
Problème résolu. Merci.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 mars 2013 à 19:23
Libère ce sujet (un clic sur le tag "réponse acceptée").


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Rejoignez-nous