Delphi FormatFloat

时间:2015-04-30 07:15:51

标签: delphi format floating-point-conversion

我有一个带有一些浮点数的输出txtfile,我喜欢用不同的格式打印,试试看:

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'

这是一个巨大的浮点值,所以,我需要一个低处理解决方案,我认为更多的条件将减慢应用程序。 ¿有什么建议吗?

谢谢

2 个答案:

答案 0 :(得分:2)

使用条件测试将值排序为单独的输出不会以显着的方式影响性能。格式化过程要复杂得多。优化的一个重要事项是,只有在可以测量实际代码中的性能命中时,才能走这条路。

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变量。

答案 1 :(得分:0)

我认为条件会更快地运行,但请考虑这个草图(关注超出范围的值):

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