我有一个包含整数的字符串数组。我需要在可能的情况下将它们转换为整数。
因此我喜欢:
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。
答案 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;