乗数と単位を使用して科学的な形式で浮動小数点値を表示する必要が頻繁にあります。たとえば、1500 V (ボルト) の値は 1.5 kV と表示されます。1e-4 V の非常に小さな電圧は 100 uV として表示されます。何年もの間、内部で作成されたルーチンを使用して、この float から string への変換を行ってきましたが、最近、そのような手段がより一般的に利用可能であるかどうか疑問に思いました。
3 に答える
4
対数についての知識がほとんどないこの FormathWithPrefix 関数を使用しています... :)
SIプレフィックス範囲をサポート!
function FormathWithPrefix(n: double; decimals: integer): string;
var
index: integer;
const
Prefixes: array[-9..9]of string = ('<', 'y', 'z', 'a', 'f', 'p', 'n', 'µ', 'm', '',
'k','M', 'G', 'T', 'P', 'E', 'Z', 'Y', '>');
begin
index := round((Ln(n) / Ln(10) - 1) / 3);
if index > 9 then
index := 9;
if index < -9 then
index := -9;
result := (FloatToStrF(n / Exp(index * 3 * ln(10)) , ffFixed, 20, decimals) + Prefixes[index]);
end;
begin
n := 1500;
Writeln(FormathWithPrefix(n, 1),'V');
于 2011-02-14T18:22:19.387 に答える
1
ルーチンをより「ネイティブ」にすることが目標である場合は、ConvUtils ユニットと StdConvs ユニットを調べて、これらのユニットが提供する変換関数に基づいてルーチンを作成できるかどうかを確認できます。(これらのユニットがいつ導入されたかは不明です。Google ですばやく検索すると、Delphi 6 が示唆されます)
しかし、それは必ずしもあなたにとって多くのことを達成するとは限りません。(達成したい内容によって異なります)
于 2011-02-14T17:59:38.920 に答える
0
ここで試してください: http://www.delphibasics.co.uk/RTL.asp?Name=FloatToStrF
特にこれ: `ShowMessage('Using 8,4 = '+FloatToStrF(amount1, ffFixed, 8, 4)); 次のようなものを使用できることを示します。
var
Answer:string;
thevolts:double;
begin
Answer:= FloatToStrF(thevolts, ffFixed, 8, 4)+' kV'
end;
于 2011-02-14T14:46:52.620 に答える