2017-12-22 3 views
1

엠바 카데로 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. 
+1

FWIW 이것은 복잡한 숫자로 작업하는 데 실제로 비효율적 인 방법입니다. –

+0

안녕하세요 David - 당신은 무엇을 제안합니까? –

+0

연산자 오버로드가있는 향상된 레코드입니다. –

답변

4

그것은 실제로 매우 간단합니다 : 내 독일어 Windows에서

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

, 이것은

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에 의해, 실제로는 복소수의 (지금까지의 내가 볼 수) 훨씬 더 구현이있다. 그것은 (보통) 델파이와 함께 설치되는 샘플과 함께 제공됩니다. <your samples dir>\Delphi\RTL\ComplexNumbers 디렉토리를 살펴보십시오. 이것은 확장 된 레코드를 사용하므로 일반 값 유형, 즉 Double 또는 Integer와 같이 사용할 수 있습니다.

+0

대답 주셔서 감사합니다. –

+0

@HenrikLyder : 그렇다면 답을 수락 할 수 있습니다 (답을 얻으려면 점수 근처의 회색 체크 표시를 클릭하여 초록색으로 바꿉니다). –