[VB] conversion de données -> integer

conversion de données -> integer [VB] - Programmation

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.
Reply

Marsh Posté le 26-02-2002 à 12:26:43   

Reply

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.


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

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))


---------------
I'm so crazy that sometime people think i'm clever.
Reply

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


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

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)

Reply

Marsh Posté le 26-02-2002 à 13:01:27    

Carbon_14 tu lui as tout fait c'est pas cool pour lui  :)


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

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


---------------
I'm so crazy that sometime people think i'm clever.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed