Delphi 格式浮动
Delphi FormatFloat
我有一个带有一些浮点数的输出 txt 文件,我喜欢以不同的格式打印,你试试:
FormatFloat('00000;000.0;00.00', val)
FormatFloat('00.00;000.0;00000', val)
但是我输出错误。我需要的是:
- 如果 val < 10 则输出类似 '00.00'
- 如果 10 < val < 100 则输出类似 '000.0'
- 如果 val > 100 则输出类似 '00000'
这是大量的浮点值,因此,我需要一个低处理解决方案,我认为更多的条件会降低应用程序的速度。 ¿有什么建议吗?
谢谢
使用条件测试将值分类为单独的输出不会对性能产生重大影响。格式化过程要复杂得多。关于优化的一件重要事情是,只有在您可以衡量实际代码中的性能影响时才走那条路。
if (val < 10) then
s := FormatFloat('00.00',val)
else
if (val < 100) then
s := FormatFloat('000.0',val)
else
s := FormatFloat('00000',val);
同时考虑使用线程安全的 FormatFloat 和提供的 FormatSettings
变量。
我想条件语句会工作得更快,但考虑一下这个草图(关心超出范围的值):
const
FormatString: array[-1..2] of string = ('0.000', '0.00', '0.0', '0');
var
x: Double;
i: integer;
begin
x := 0.314;
for i := 1 to 4 do begin
Memo1.Lines.Add(FormatFloat(FormatString[Floor(Log10(x))], x));
x := x * 10;
end;
0.314
3.14
31.4
314
我有一个带有一些浮点数的输出 txt 文件,我喜欢以不同的格式打印,你试试:
FormatFloat('00000;000.0;00.00', val)
FormatFloat('00.00;000.0;00000', val)
但是我输出错误。我需要的是:
- 如果 val < 10 则输出类似 '00.00'
- 如果 10 < val < 100 则输出类似 '000.0'
- 如果 val > 100 则输出类似 '00000'
这是大量的浮点值,因此,我需要一个低处理解决方案,我认为更多的条件会降低应用程序的速度。 ¿有什么建议吗?
谢谢
使用条件测试将值分类为单独的输出不会对性能产生重大影响。格式化过程要复杂得多。关于优化的一件重要事情是,只有在您可以衡量实际代码中的性能影响时才走那条路。
if (val < 10) then
s := FormatFloat('00.00',val)
else
if (val < 100) then
s := FormatFloat('000.0',val)
else
s := FormatFloat('00000',val);
同时考虑使用线程安全的 FormatFloat 和提供的 FormatSettings
变量。
我想条件语句会工作得更快,但考虑一下这个草图(关心超出范围的值):
const
FormatString: array[-1..2] of string = ('0.000', '0.00', '0.0', '0');
var
x: Double;
i: integer;
begin
x := 0.314;
for i := 1 to 4 do begin
Memo1.Lines.Add(FormatFloat(FormatString[Floor(Log10(x))], x));
x := x * 10;
end;
0.314
3.14
31.4
314