我需要一个函数来返回/打印一个整数上的符号。到目前为止,我想出了这个:
def extract_sign(integer)
integer >= 0 ? '+' : '-'
end
是否有内置的Ruby方法可以做到这一点?
答案 0 :(得分:38)
这是一种简单的方法:
x = -3
"++-"[x <=> 0] # => "-"
x = 0
"++-"[x <=> 0] # => "+"
x = 3
"++-"[x <=> 0] # => "+"
或
x = -3
"±+-"[x <=> 0] # => "-"
x = 0
"±+-"[x <=> 0] # => "±"
x = 3
"±+-"[x <=> 0] # => "+"
答案 1 :(得分:8)
我认为没有一个只给出-1或+1的方法是胡说八道。甚至BASIC也具有SGN(n)这样的功能。当我们想要使用的数字时,为什么我们必须处理字符串。但那只是MHO。
def sgn(n)
n <=> 0
end.
答案 2 :(得分:4)
您可以使用Kernel#sprintf
格式化数字:
def sign(i)
sprintf("%+d", i)[0]
end
sign(100) #=> "+"
sign(-100) #=> "-"
答案 3 :(得分:3)
class Numeric
def sign
if self > 0
'+'
elsif zero?
nil
else
'-'
end
end
end
答案 4 :(得分:2)
Ruby没有像Javascript这样的内置符号功能。这是一个解释更多的主题 http://www.ruby-forum.com/topic/141216
您的方法看起来是正确的。
答案 5 :(得分:0)
我使用n == 0 ? 1 : n.abs / n
,例如:
def sign(n)
n == 0 ? 1 : n.abs / n
end
sign(10) # 1
sign(0) # 1
sign(-5) # -1
答案 6 :(得分:0)
def sgn(x)
[0,1,-1][x<=>0];
end
如果x == 0,则返回0;如果x> 0,则返回1;如果x <0,则不返回-1,而返回
。 sgn(2.0)*2**2