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

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;
L'erreur à l'exécution est :

Nom : Aide 26.jpg
Affichages : 235
Taille : 31,7 Ko

Note : Je souhaite un résultat numérique et non pas un string qui a déjà été suggéré sur ce site!

merci