4

DEFAULTFloatToStr関数の使用

FloatToStr('0.0000442615029219009')

出力

4.42615029219009E-5

小数点以下1桁をドロップ

FloatToStr('0.000442615029219009')

を生成します

0.000442615029219009

2番目のケースの値が出力されない理由を誰かが説明できますか

4.42615029219009E-4
4

3 に答える 3

11

ドキュメントにFloatToStrは答えが含まれています:

変換には、有効数字 15 桁の一般的な数値形式が使用されます。

そのステートメントを解釈するには、関数を説明するトピックFormat、特に一般的な数値形式に関するテキストも参照する必要があります (私の強調):

値は、固定形式または指数形式を使用して、可能な限り短い 10 進文字列に変換されます。結果の文字列の有効桁数は、書式文字列の精度指定子によって指定されます。精度指定子が存在しない場合、デフォルトの精度は 15 と見なされます。後続のゼロは結果の文字列から削除され、小数点は必要な場合にのみ表示されます。値の小数点の左側の桁数が指定された精度以下で、値が 0.00001 以上の場合、結果の文字列は固定小数点形式を使用します。それ以外の場合、結果の文字列は科学的形式を使用します。

残念ながら、ドキュメントは実際には間違っています。代わりに0.00001を読む必要があります0.0001。これは、次のプログラムによって示されます。

program FloatToStrScientificFixed;
{$APPTYPE CONSOLE}
uses
  System.SysUtils;

var
  d: Double;

begin
  d := 0.0001;
  Writeln(FloatToStr(d*0.9999999));
  Writeln(FloatToStr(d));
  Writeln(FloatToStr(d*1.0000001));
  Readln;
end.

あなたの例で0.0000442615029219009は、より少ないので0.0001、科学表記法を使用してフォーマットされています。ただし0.000442615029219009、より大きい0.0001ため、固定表記を使用して書式設定されます。

出力で常に科学表記法を使用する場合Formatは、e 書式文字列を使用します。


QC#107388

于 2012-07-26T09:09:20.130 に答える
1

最初の例の仮数部の有効桁数が表示桁数を超えているため、次を参照してください。

Delphi の基本: FloatToStr

書式設定をより細かく制御したい場合は、代わりに FloatToStrF 関数を使用してください。

EDIT : 桁数の説明が正しくありません。正しい説明については、David Hefferman の回答を参照してください。

于 2012-07-26T08:37:55.830 に答える
1

ある時点FloatToStrで、関数は指数形式に切り替わり、出力の文字数が制限されます。そうしないと、a を表示するDoubleために最大 300 桁の 10 進数が必要になる場合があり、これは解釈には実用的ではありません。

関数を使用Formatして、厳密なルールを指定できます。

于 2012-07-26T08:40:58.890 に答える