打印复数

问题描述 投票:1回答:1

使用embarcadero XE7和System.VarCmplx - 需要将复数表示为字符串。创建复数的简单示例,其目的是在表单的标题中显示它。我的问题是我无法弄清楚如何将复数转换为字符串 - 应该是'1.23 + 4.56i'。

unit Unit57;
interface
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, 
    System.Classes, Vcl.Graphics,
    System.VarCmplx,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
    TForm57 = class(TForm)
      procedure FormCreate(Sender: TObject);
    end;

var
  Form57: TForm57;

implementation

{$R *.dfm}

procedure TForm57.FormCreate(Sender: TObject);
v : Variant;
begin
  v := VarComplexCreate( 1.23, 4.56 );
  // following does not work
  Caption := v.AsString;
end;
end.
delphi complex-numbers
1个回答
4
投票

这很简单,实际上:

  v := VarComplexCreate(1.23, 4.56);
  Caption := v;

在我的德语Windows上,这显示

1,23 + 4,56i

不需要.AsString

如果您想要自定义格式,您可以直接使用实部和虚部,并执行以下操作:

var
  A, B: Extended;
  ...
  A := v.Real;
  B := v.Imaginary;
  Caption := Format('%.3f+%.3fi', [A, B], TFormatSettings.Invariant);

这表明:

1.230+4.560i

注意:实现中有一个公共属性AsString,但显然只能从代码中访问已发布的属性。我想这是公开的,因为无论如何用户都不需要它。


请注意,您的代码无法编译。虽然看起来好像是从Delphi编辑器中复制并粘贴了它,但程序中没有正确的var部分,因此无法编译。请始终使用复制和粘贴。


Hallvard Vassbotn实际上有一个(据我所知)复杂数字的更好实现,使用扩展记录而不是变体。它附带的样本(通常)与Delphi一起安装。只需查看<your samples dir>\Delphi\RTL\ComplexNumbers目录即可。这使用扩展记录,因此可以像普通值类型一样使用,例如Double或Integer。

© www.soinside.com 2019 - 2024. All rights reserved.