如何在Ruby中提取整数的符号?

时间:2013-12-12 08:44:10

标签: ruby function

我需要一个函数来返回/打印一个整数上的符号。到目前为止,我想出了这个:

def extract_sign(integer)
  integer >= 0 ? '+' : '-'
end

是否有内置的Ruby方法可以做到这一点?

7 个答案:

答案 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