打印复数
Print complex number
使用 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.
其实很简单,其实:
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
注:实现中有public属性AsString
,但显然只有发表 可以从代码访问属性。我猜测它是public因为无论如何用户都不需要它。
请注意,您的代码无法编译。虽然看起来好像是从 Delphi 编辑器中复制粘贴的,但程序中没有适当的 var
部分,因此无法编译。请始终使用复制和粘贴。
实际上有一个(据我所知)更好复数的实现,Hallvard Vassbotn,使用扩展记录而不是变体。它带有(通常)与 Delphi 一起安装的样本。只需查看 <your samples dir>\Delphi\RTL\ComplexNumbers
目录。这使用扩展记录,因此它可以像普通值类型一样使用,即像 Double 或 Integer。
使用 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.
其实很简单,其实:
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
注:实现中有public属性AsString
,但显然只有发表 可以从代码访问属性。我猜测它是public因为无论如何用户都不需要它。
请注意,您的代码无法编译。虽然看起来好像是从 Delphi 编辑器中复制粘贴的,但程序中没有适当的 var
部分,因此无法编译。请始终使用复制和粘贴。
实际上有一个(据我所知)更好复数的实现,Hallvard Vassbotn,使用扩展记录而不是变体。它带有(通常)与 Delphi 一起安装的样本。只需查看 <your samples dir>\Delphi\RTL\ComplexNumbers
目录。这使用扩展记录,因此它可以像普通值类型一样使用,即像 Double 或 Integer。