在我的程序中,我需要经常在代码中获得百分比。现在我有这个功能来解决它
function percent(whole, part: double):double;
begin
percent:= whole * part / 100;
end;
我想知道有什么方法可以制作新的操作符,所以我只能编写类似:a:= 100%20,并得到想要的结果。它也应该能够用作:c:= b / a;或:c:= c / a;
答案 0 :(得分:3)
您可以在pascal中定义运算符,但仅限于记录类型。它被称为运算符重载,您可以阅读here。你要做的是定义你自己的记录类型数据,然后重载标准运算符,如 =< > %等做你想做的事。这是一个简单的例子:
Interface
Type
TMyFloatType = record
value: Extended;
class operator Implicit(n: Extended): TMyFloatType;
class operator Explicit(n: Extended): TMyFloatType;
class operator Equal(a, b: TMyFloatType): Boolean;
class operator GreaterThan(a, b: TMyFloatType): Boolean;
end;
Implementation
class operator TMyFloatType.Implicit(n: Extended): TMyFloatType;
begin
result.value := n;
end;
class operator TMyFloatType.Explicit(n: Extended): TMyFloatType;
begin
result.value := n;
end;
class operator TMyFloatType.Equal(a, b: TMyFloatType): Boolean;
begin
result := (a.value = b.value);
end;
class operator TMyFloatType.GreaterThan(a, b: TMyFloatType): Boolean;
begin
result := (a.value > b.value);
end;
然后您可以像常规变量一样使用它:
procedure Test;
var
a, b: TMyFloatType;
Begin
// first assign some values to a and b
a := 3.14;
b := 2.7;
if a > b then
Begin
// Do something
End;
End;
您可以重载的运算符也包括数学运算符,如+ - / * mod div
等。
现在,尽管如此,我确实认为实际实现它以避免一个简单的功能并不是很方便,但是,嘿,你的选择。
请注意,您可以让运营商超负荷进行出价。我相信像percentage := a % 20;
这样的计算你需要重载模数运算符。
答案 1 :(得分:0)
没有办法做到这一点。您只能使用
功能答案 2 :(得分:0)
我只想使用一个函数。顺便说一下,你的功能
函数百分比(整数,部分:双精度):double; 开始 百分比:=整个*部分/ 100; 端;
不正确。它应该是
百分比:= 100.0 *部分/整体;