web-dev-qa-db-ja.com

バリアント値を整数に変換する方法は?

以下は私のコードです:

_var
  i : integer;
  ...
  ...
if not VarIsNull(TcxLookupComboBox(Sender).EditValue) then
begin
  i := Integer(TcxLookupComboBox(Sender).EditValue);
end;
_

VarToStrを使用してバリアントを文字列に変換できますが、DelphiにはVarToIntがありません。だから、私はこのように変換しましたInteger(TcxLookupComboBox(Sender).EditValue)。これは正しいアプローチですか?

12
user1556433

これを見てください: http://docwiki.embarcadero.com/RADStudio/XE5/en/Variant_Types

特にVariant Type Conversionsセクションを確認してください。

暗黙の型キャストを直接使用して割り当てることができるはずです。 Delphiの場合と同様に、それを処理します。

例として:

var
  theVar: Variant;
  theInt: integer;
begin

  theVar := '123';
  theInt := theVar;
  showmessage(IntToStr(theint));
end;

これは問題なく動作します。

データが整数であり、実行時に安全であることを確認するには(バリアントに文字列値がなかったため、実行時にエラーが発生するため)、 Val関数: http://docwiki.embarcadero.com/Libraries/XE5/en/System.Val

お役に立てれば。

10
EchelonKnight

これは役立つかもしれません:

function VarToInt(const AVariant: Variant): integer;
begin
  Result := StrToIntDef(Trim(VarToStr(AVariant)), 0);
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
  ShowMessage(IntToStr(VarToInt(NULL)));
  ShowMessage(IntToStr(VarToInt(' 124   ')));
  ShowMessage(IntToStr(VarToInt(13.87)));
  ShowMessage(IntToStr(VarToInt('Edijs')));
end;

結果は次のとおりです。0、124、0、0。フロートで動作するように設定できます。