conversion de données -> integer [VB] - Programmation
Marsh Posté le 26-02-2002 à 12:32:46
Je crois que c'est normal : 
 
voici la doc ( enfin la partie qui concerne cint et le pb ici mentionné) 
 
CInt(expression) 
 
L'argument expression peut être n'importe quelle expression de chaîne ou expression numérique. 
 
RQ : Si l'argument expression passé à la fonction excède la plage de valeurs du type de données cible, une erreur se produit. 
Marsh Posté le 26-02-2002 à 12:50:30
ok merci mais j'avais lu la doc aussi   
  
 
mon probleme en fait n'est pas de savoir pourquoi ça marche pas (on le sait tous les 2   ) mais comment faire pour lorsque je fais la conversion mon integer soit "rempli" ( je crois d'ailleur que dans d'autre language (java?) la conversion de type fait ça automatiquement (avec perte d'information bien sur))
 ) mais comment faire pour lorsque je fais la conversion mon integer soit "rempli" ( je crois d'ailleur que dans d'autre language (java?) la conversion de type fait ça automatiquement (avec perte d'information bien sur)) 
Marsh Posté le 26-02-2002 à 12:55:40
je pense qu'il faut que tu refasse une fonction qui verifierait si c'est une valeur exacte pour un int et sinon mets la valeur max dans le int. 
 
je pense que c'est le plus simple et le plus rapide 
Marsh Posté le 26-02-2002 à 12:59:00
Faudrait écrire une fonction  
integer Cint_New(xdouble as double) 
telle que  
 
if (xdouble > 32767.0) 
  return 32767 
endif 
 
if (xdouble < -32767.0) 
  return -32768 
endif 
 
return Cint(xdouble) 
Marsh Posté le 26-02-2002 à 13:01:27
Carbon_14 tu lui as tout fait c'est pas cool pour lui   
 
Marsh Posté le 26-02-2002 à 13:03:09
yep merci tout les 2 
 
enfait j'ai deja fait ça : 
 
 
Private Function long2int(value As Long) As Integer 
 
If value > 32767 Then 
    long2int = 32767 
    Exit Function 
End If 
 
If value < -32768 Then 
    long2int = -32768 
    Exit Function 
End If 
 
long2int = CInt(value) 
 
End Function 
 
 
finalement c'est peut etre le + simple ... 
 
merci tous les 2 
Marsh Posté le 26-02-2002 à 12:26:43
par exemple j'ai une variable de type Double
je voudrais remplier une variable de type integer avec cette variable et si cette valeur de départ est plus grande que la limite du type Integer alors la variable integer vaut le maximun possible pour son type
dim Xinteger as integer
dim Xdouble as double
xdouble =34562882,322
xinteger =Cint(xdouble) ça par exemple ça marche pas (overflow)
alors que je voudrais avoir xinteger=32767 (le max possible) même si c'est vrai il y a perte d'information .
pourquoi ? parce que je veux ensuite avec cette valeur integer dessiner a l'ecran , hors les fonction GDI accepter que des valeurs integer (pour les windows 9X en tout cas) ,donc faire comme une sorte de clipping car si j'appel une fonction avec une valeur trop grande ça trace n'importe quoi
par exemple une ligne de (0,0) à ( 170000,170000) ça devrait tracer à l'ecran la même ligne que (0,0) à (10000,10000) (en pixels) (meme si dans le premier cas la mojorité de la ligne ets tracée hors ecran) -> et bein non !
---------------
I'm so crazy that sometime people think i'm clever.