德尔福兑换货币

时间:2018-09-17 15:56:45

标签: delphi currency

嗨,我想将某种货币转换为另一种货币,例如从USD转换为EUR,但也转换为其他任何货币,我不知道该怎么做,有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

您可以轻松地使用以下方法作为指导:

function EuroToDollar(amount: integer): double;
begin
  Result := amount * 1.17;
end;

我从1.17处获得了Google的收入,但是您可以在任何地方轻松找到转化率。


这种方法不错,但不灵活,因为如果考虑到很多货币,您应该创建很多功能。我已经创建了这个简单的VCL应用程序:

type
  TCurrency = (cEuro, cDollar, cWhatever);
  TConversion = reference to function(target: TCurrency; amount: double): double;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    CurrencyList: TDictionary<TCurrency, TConversion>;
  public
    function Convert(fromCurr: TCurrency; toCurr: TCurrency; amount: double): double;
  end;

我使用字典来存储您必须使用的货币和兑换方法。

//example
procedure TForm1.Button1Click(Sender: TObject);
var
  euro, dollar: double;
begin
  //euro-dollar
  euro := Convert(cEuro, cDollar, 2);
  ShowMessage(euro.ToString);

  //dollar-euro
  dollar := Convert(cDollar, cEuro, 5);
  ShowMessage(dollar.ToString);
end;

function TForm1.Convert(fromCurr, toCurr: TCurrency; amount: double): double;
begin
  Result := CurrencyList[fromCurr](toCurr, amount);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  CurrencyList := TDictionary<TCurrency, TConversion>.Create();

  CurrencyList.Add(TCurrency.cEuro, function(target: TCurrency; amount: double): double
                                    begin
                                      case target of
                                        cDollar:
                                          begin
                                            Result := amount * 1.17;
                                          end;
                                      end;
                                    end);

  CurrencyList.Add(TCurrency.cDollar, function(target: TCurrency; amount: double): double
                                      begin
                                        case target of
                                          cEuro:
                                            begin
                                              Result := amount * 0.86;
                                            end;
                                        end;
                                      end);
end;

通过这种方式,您可以一次定义一种货币,然后只需在case中添加新值即可添加转化。这是我认为您可以做的事情的骨架,但是可能还有更多的事情(例如从网站获取转换常数),但这超出了答案的范围。