0

私は FloatToStr() を使用していますが、エラーがあります! 私のソースコードをお見せします。

void __fastcall TForm1::FormCreate(TObject *Sender)
{ 
float i=3.14;
 Double j=3.14;
 Double k=0;
 Double m,n;

 Edit1->Text=FloatToStr(i);         //  It's show 3.14000010490417
 Edit2->Text=FloatToStr(j);         //  It's show 3.14

 Edit3->Text=FloatToStr(314/100);   // It's  show 3

 k=314/100;
 Edit4->Text=FloatToStr(k);         // It's show  3

 m=314;
 n=100;
 Edit5->Text=FloatToStr(m/n);       // It's  show 3.14

}

私は尋ねますか?なんで ?すべてが3.14を表示していません???? !!! または FloatToStr() のバグです!!

  1. Edit1->Text=FloatToStr(i); // ショー 3.14000010490417 です
  2. Edit3->Text=FloatToStr(314/100); // ショー 3 です
  3. Edit4->Text=FloatToStr(k); // ショー 3 です

答えてくれてありがとう。

4

3 に答える 3

2

コードで整数除算と浮動小数点除算を混在させているため、異なる結果が得られます。整数除算では、小数点以下はすべて切り捨てられます

// This line is performing integer division
// and the final result is passed into FloatToStr.
// aka it's the same as calling FloatToStr(3).
Edit3->Text=FloatToStr(314/100);

// Again, the right-hand side is doing integer division
// and the result is implicitly casted to a double.
// aka it's the same as doing k = static_cast<double> (3);
k = 314/100;
Edit4->Text=FloatToStr(k);         // It's show  3

// These two lines implicitly casts int to a double
// when assigned in this manner.
m = 314;
n = 100;
// Now this is performing double division so you 
// get the expected result. It's the same as calling
// Edit5->Text=FloatToStr( 314.0/100.0 );
Edit5->Text=FloatToStr(m/n);       // It's  show 3.14
于 2013-06-03T06:23:10.333 に答える
0

2 つの整数値を除算しているため、式 314/100 は整数になります。浮動小数点演算を使用して除算する場合は、式 314.0 / 100.0 を使用する必要があります。

コード内の静的な数値で小数点記号 (.) を使用すると、コンパイラはそれを浮動小数点値として使用します。

于 2013-07-03T11:27:43.527 に答える