在Delphi中将异常整数字符串转换为整数值

时间:2017-10-02 09:48:25

标签: delphi

我有一个包含整数的字符串数组。我需要在可能的情况下将它们转换为整数。

因此我喜欢:

override func viewDidLoad() {
    super.viewDidLoad()

    typeCollectionView.dataSource = self
    typeCollectionView.delegate = self

    [...]
}

但当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; 面临的数字类似于' 10.0',' 11.00'等,实际上是一个整数,它返回false,继续出错。 SysUtils.pas中的TryStrToInt实现为:

TryStrToInt

与任何其他字符串数字转换一样,它使用function TryStrToInt(const S: string; out Value: Integer): Boolean; var E: Integer; begin Val(S, Value, E); Result := E = 0; end;

我只看到一个糟糕的解决方案,比如尝试将字符串转换为float,然后,如果成功,则将float转换为整数。但它看起来很难看。 还有其他标准方式吗?可能没有使用Val。

UPD:我使用的是Delphi XE5。

1 个答案:

答案 0 :(得分:9)

如果您只需要小数部分为零的数字作为有效整数,您可以尝试这样做:

function MyStrToInt(const S: string; out Value: Integer): Boolean;
var
  E: Integer;
  RealValue: Real;
begin
  Val(S, RealValue, E);
  Result := (E = 0) and (Frac(RealValue) = 0);
  if Result then Value := Trunc(RealValue);
end;