はじめてのDelphi(その1)


戻る

ここでは、VBC++BuilderDelphiの代入文(型変換)の記述の違いを見てみます。

代入文

  • ボタン1は、整数から実数への代入です。

  • ボタン2は、実数から整数への代入です。


VBの場合

  • 実数から整数への代入の場合、小数部を四捨五入します。

先頭へ

Private Sub Command1_Click()
  Dim iwork As Integer
  Dim dwork As Double
  
  ' 整数から実数への代入
  iwork = 1
  dwork = iwork
  Call MsgBox(Str(dwork)) ' 結果は"1"
End Sub

Private Sub Command2_Click()
  Dim iwork As Integer
  Dim dwork As Double
  
  ' 実数から整数への代入
  dwork = 1.5
  iwork = dwork
  Call MsgBox(Str(iwork)) ' 結果は"2"
End Sub


C++Builderの場合

  • 実数から整数への代入の場合、小数部を切り捨てます。

先頭へ

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  // 整数から実数への代入
  int iwork = 1;
  double dwork = double(iwork);
  ShowMessage( FloatToStr( dwork ) );  // 結果は"1"
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  // 実数から整数への代入
  double dwork = 1.5;
  int iwork = int(dwork);
  ShowMessage( IntToStr( iwork ) );  // 結果は"1"
}
//---------------------------------------------------------------------------


Delphiの場合

  • 実数から整数への代入は直接できません。
    Round(),Trunc()かバリアント型経由で変換を行う方法があります。
  • Round(),バリアント経由は小数部を四捨五入します。
  • Trunc()は小数部を切り捨てます。
(注意)Round()の四捨五入は財務/統計関数で使われるもので扱いが特殊です。ヘルプにあるTrunc()を使用した四捨五入のサンプルを使用するようにしましょう。

先頭へ

procedure TForm1.Button1Click(Sender: TObject);
var
  iwork: Integer;
  dwork: Double;
begin
  // 整数から実数への代入
  iwork := 1;
  dwork := iwork;
  ShowMessage( FloatToStr( dwork ) );  // 結果は'1'
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  iwork: Integer;
  dwork: Double;
  vwork: Variant;
begin
  // Round()による実数から整数への代入
  dwork := 1.5;
  //iwork := dwork;  ←'Integer' と 'Double' には互換性がありません
  iwork := Round( dwork );
  ShowMessage( IntToStr( iwork ) );  // 結果は'2'

  // Trunc()による実数から整数への代入
  iwork := Trunc( dwork );
  ShowMessage( IntToStr( iwork ) );  // 結果は'1'

  // Variant経由による実数から整数への代入
  dwork := 1.5;
  vwork := dwork;
  iwork := vwork;
  ShowMessage( IntToStr( iwork ) );  // 結果は'2'
end;

 

先頭へ/戻る