将浮点数写入带有十进制而不是科学的文件

时间:2014-06-05 14:03:33

标签: delphi

我需要将一些变量保存到文本文件中,但我不希望它们保存为科学值,即1.0000000E + 0,而是1.00。有没有办法在FormCreate上设置格式,还是我必须自己格式化每个变量?可能有大约50个变量需要保存,所以我正在寻找一些方法来节省时间和行。

var
A, B, C, D, E, F, ShapeIndex, X, Y, Z: array of double;

procedure TWriteDerob.Mapping;
 nel := (DerobModel.WallCount + DerobModel.RoofCount + DerobModel.FloorCount);
  SetLength(Name, nel);
  SetLength(A, nel);
  SetLength(B, nel);
  SetLength(C, nel);
  SetLength(D, nel);
  SetLength(E, nel);
  SetLength(F, nel);

  for i := 0 to nel do
  begin
    if (i = 0) or (i = 2) then
    begin
      A[i] := Surface.Width;
      B[i] := Surface.Height;
    end;
    if (i = 1) or (i = 3) then
    begin
      A[i] := Surface.Length;
      B[i] := Surface.Height;
    end;
    if (i = 4) and (i=5) then
    begin
      A[i] := Surface.Width;
      B[i] := Surface.Length;
    end;
  end;

end;
procedure TWriteDerob.Save;
var
  T: TextFile;
  j: integer;
begin

  AssignFile(T, FFilename);
  Rewrite(T);
for j := 0 to nel - 1 do
  begin
    WriteLn(T, '   ', A[j], '   ', B[j], '   ', C[j], '   ', D[j], '   ', E[j],
      '   ', F[j], ' ', Zenith[j], ' ', Azimuth[j], ' ', X[j], '      ', Y[j],
      '      ', Z[j]);
end;

这只是代码的一部分,它使用我想要从科学值更改为十进制值的位,如果它可以帮助你。

2 个答案:

答案 0 :(得分:3)

使用众多浮动到文本转换函数之一来控制它。例如:

var
  val: Double;
  str: string;
....
str := Format('%.3f', [val]);
// or as an alternative:
str := FormatFloat('0.000', val);

我猜您使用的FloatToStr()函数不会给您如此细粒度的控制。

显然,您不想一遍又一遍地编写此代码。但那是一个标准问题。使用提取程序的标准解决方案。


您的问题编辑提供了更多详细信息。现在我们知道您使用Writeln输出到文本文件。您可以使用Writeln应用格式。例如,对于三位小数,请使用:

Writeln(val:0:3);

您需要查阅Write的文档。

答案 1 :(得分:2)

无法设置全局写入文本文件的数字格式。你需要自己做。

最简单的方法可能是编写一个执行格式化的函数,然后使用该函数将每个值写入指定文件以格式化数字。该格式化功能只使用Format('%.3f', [YourVal])FormatFloat('0.00', YourVal);

为了存储你的数组,你只需循环遍历它们,格式化每个单独的值并将其写入文件。

您知道仅仅强制格式会导致丢失可能影响计算的有效数字,对吗?