Delphi 用Pascal格式化分数

Delphi 用Pascal格式化分数,delphi,floating-point,pascal,freepascal,lazarus,Delphi,Floating Point,Pascal,Freepascal,Lazarus,我需要打印矩阵中的值,这些值可能从整数到实数不等。作为示例,我的程序使用一个名为kernel的矩阵,如下所示: kernel[0,0]:= 1/16; kernel[0,1]:= 2/16; kernel[0,2]:= 1/16; kernel[1,0]:= 2/16; kernel[1,1]:= 4/16; kernel[1,2]:= 2/16; kernel[2,0]:= 1/16; kernel[2,1]:= 2/16; kernel[2,2]:= 1/16; 打印每一个代码时都会出现

我需要打印矩阵中的值,这些值可能从整数到实数不等。作为示例,我的程序使用一个名为kernel的矩阵,如下所示:

kernel[0,0]:= 1/16;
kernel[0,1]:= 2/16;
kernel[0,2]:= 1/16;
kernel[1,0]:= 2/16;
kernel[1,1]:= 4/16;
kernel[1,2]:= 2/16;
kernel[2,0]:= 1/16;
kernel[2,1]:= 2/16;
kernel[2,2]:= 1/16; 

打印每一个代码时都会出现问题,因为我找不到一种简单易读的方法来打印像
1/16
这样的数字,程序会显示像
6.2500000000000000000000e-2
这样的东西,这没问题,但我更喜欢像
0.0625
这样更美观的东西,甚至更好的
1/16
。是否有人确认允许我这样做的格式化方式?

每个数组元素都保存分数的值

要将值写成分数,只需将分子计算为数组元素与分母的乘积

我更喜欢使用
Format()
函数设置显示格式

给定所显示的数组,两个索引变量,
a
b
以及分母

denominator := 16;
for a := 0 to 2 do
  for b := 0 to 2 do
  begin
    s := format('kernel[%d,%d] = %d/%d',[a,b,round(kernel[a,b]*denominator),denominator]);
    memo1.Lines.Add(s);
  end;

1/16
不是一个数字,而是一个操作。如果要显示
1/16
,则需要以字符串形式显示。您可以使用
RoundTo
截断到特定的小数位数,但这样做会影响使用该值进行计算的准确性。出于显示目的,您可以使用
FormatFloat
Format
仅显示部分十进制值,而不会损失值本身的准确性。在本文中,准确性不是我非常关心的问题,因此我将使用RoundTo。。。当您再次尝试将它们相加时,可能会向您表示感谢。:-)另外,
2/16
是正确的
1/8
4/16
1/4
。如果您的问题是显示数字,您可以使用格式('%5.3f',[Kernel[0,0]);该格式返回一个数字“格式化”的字符串,长度为5位和3位小数。1/16将变为“0.625”。有很多选项,请查看文档,这可能是您想要寻找的:如果内核是一个大矩阵,如100×100或1000×1000,请不要忘记
BeginUpdate
EndUpdate
(使用
try..finally
保护,当然).Yes@Andreas这在打印10000或1000000行时非常重要谢谢Tom和Andreas。我使用的内核有3x3维,因此不需要,谢谢!