J'ai un tableau de chaînes de caractères contenant des nombres entiers. J'ai besoin de les convertir en nombres entiers lorsque cela est possible.
Par conséquent, j'aime bien :
if not TryStrToInt ( grid.Cells[columnIndex, i], integerValue ) then begin
errorsCount := errorsCount + 1;
errMemo.Lines.Add ( 'Column "' + fstColumn.Name + '" Line ' + IntTostr ( i ) + ' Value "' + grid.Cells[columnIndex, i] + '" must be integer.' );
end
else begin
{deal with integerValue}
end;
Mais quand TryStrToInt
face à un nombre comme '10.0', '11.00' etc, qui est en fait un Integer, il renvoie false qui produit une erreur. TryStrToInt
dans SysUtils.pas implémenté comme :
function TryStrToInt(const S: string; out Value: Integer): Boolean;
var
E: Integer;
begin
Val(S, Value, E);
Result := E = 0;
end;
Comme toute autre conversion de chaîne de caractères, elle utilise Val
.
Je ne vois qu'une seule mauvaise solution : essayer de convertir une chaîne de caractères en un nombre flottant, puis, en cas de succès, convertir ce nombre en un nombre entier. Mais cela semble laid. Existe-t-il une autre méthode standard ? Peut-être que je n'utilise pas Val.
UPD : J'utilise Delphi XE5.