Bonjour,
Je teste une limite dans une fonction qui ne doit pas dépasser la valeur d'un QWord, soit 18 446 744 073 709 551 615.
Voici la fonction qui plante sur la dernière ligne de result et qui devrait également planter sur l'instruction Limite := QWord(Trunc(ResVal)) qui utilise également Trunc(ResVal)!;
L'erreur à l'exécution est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 {--- fCellMax ------------------------------------------------------------------ Les limites (nombre maximum de la population des cellules identifiables de manière unique sont celles du type des varaibles X,Y,Z et T selon la dimension Si l'on prend une seule limite et que l'on prend : 1. Type Word pour X,Y,Z, T => Limite Max = 65535×65535×65535×65535 = 1 853 020 188 851 841; => c'est donc un UInt64 ou un QWord = 0 .. 18 446 744 073 709 551 615 => Le Longword n'est pas assez grand : (0 .. 4 294 967 295) -------------------------------------------------------------------------------} function fCellMax(aDim : Tdim) : QWord; var Limite : QWord; ResVal : Extended; Fmt : string; begin result := 0; ResVal := IntPower(65535, 4); {Vérification limite du Qword} if (ResVal < 0) or (ResVal > High(QWord)) then begin Limite := QWord(Trunc(ResVal)); Fmt := Format('%d', [Limite]); // Afficher sans décimales MessageDlg('Dépassement des limites du nombre de cellules individuelles : ' + Fmt + #13#10 + 'Valeur Maximale autorisée = 1 853 020 188 851 841' , mtError, [mbOk], 0); exit; End; Result := Trunc(ResVal); end;
Note : Je souhaite un résultat numérique et non pas un string qui a déjà été suggéré sur ce site!
merci
Partager