我需要将一些变量保存到文本文件中,但我不希望它们保存为科学值,即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;
这只是代码的一部分,它使用我想要从科学值更改为十进制值的位,如果它可以帮助你。
答案 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);
。
为了存储你的数组,你只需循环遍历它们,格式化每个单独的值并将其写入文件。
您知道仅仅强制格式会导致丢失可能影响计算的有效数字,对吗?