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