如何在Delphi中将一个正数转换为负数?

11

如何在Delphi中将正整数转换为负数?我知道可以使用 ABS(int) 将负数转换为正数,但我需要将正数转换为负数。


1
如果你知道 a 是正数,并且想要获得与原点相同距离的负数,那么你只需要做 -a。如果你不知道 a 的符号,并且想要确保它是负数或零,也就是说,只有当 a 是正数时才用 -a 替换 a,那么你可以像 RBA 建议的那样做,但 Mef 的方法更简洁:-abs(a) - Andreas Rejbrand
4个回答

45

如果你想绝对确保得到负数(或零),请使用

number := -abs(number)

1
这不应该是这样吗:number:=-1*abs(number);? - Tom Hagen
9
@TomHagen:-x = -1 * x,对于所有的实数 x 成立。 - Andreas Rejbrand

19

据我所知,没有这个功能的函数。你可以制作

if yourvariable > 0 then
    yourvariable := -yourvariable;

1
谢谢,没错,我太蠢了,和C++一样,我一直把Delphi想成了Visual Basic。 - Tprice88
2
@Tprice,Visual Basic和Delphi一样,多年来一直有一元减运算符 - Rob Kennedy
哦,我从来没有在他们那里使用过它,自从使用Visual Basic 6以来,我拒绝使用.Net。 - Tprice88
3
所有语言都有一元负号运算符。 - David Heffernan
你需要进行类型检查。考虑:i: Byte; i:=10. -abs(i) 将会得到 246 作为结果。 - Pieter B
显示剩余2条评论

5

唉...太晚了,但是number := number * -1;也可以,但这会改变任何数的符号,从负数变为正数,反之亦然...为确保得到一个负值,使用@Mef的答案


编辑: 即使更晚,number := 0 - number;也可以...这只是反转了符号


":=" 是什么作用?" - Miguel Stevens

2

假设n是你的数字,那么n-(n*2) = -n的公式成立。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接