2016-12-24 26 views
2

我试图解决FizzBu​​zz游戏。Ruby中的“%”和“/”simbols差异

我需要检查一个数是否可​​以被3整除。所以,当我们取一个数并除以3时,我们需要该操作具有NO REST或0 REST。

给我的解决办法是这样的:

def fizzbuzz(number) 

    if number % 3 == 0 
    return "Fizz" 
    end 

为什么他们提出使用“%”符号?为什么不是“/”符号?或者两者都是一样的?

我该如何检查该部门是否没有REST?

+0

'%'和'/'做不同的事情。 –

+2

您能具体指出您不明白'/'和'%'文档的哪些部分?这样,可以为未来的读者改进文档。 –

回答

5

除法运算符/ - 给出除法的其余部分的除数的商。因此,您无法使用除法运算符(/)确定数字是完全可分的(余数= 0)还是不完全可分的(非零余数)。

10/3 
#=> 3 

模运算% - 给出了除法的余数。如果完全可分,则输出为0,如果不是完全可分的,则输出为非零值。

10 % 3 
#=> 1 

在你的情况number % 3 == 0true仅当number是被3整除0剩余部分(即,如果number传递到方法frizzbuzz是3的倍数像-12,-3,3,6,9,等)

0

%是模数 - 用右手操作数分开左手操作数并返回余数。 \只是分隔线。没有休息意味着x%y == 0.

0

让举个例子来更好地理解:

number1 = 12 
number2 = 13 

让我们看看数字1和数字2是devisible 4好吗?

number1/4 = 3 and the rest = 0 
number2/4 = 3 and the rest = 1 

所以“/”运行让我们知道等分操作 和“%”操作的结果让我们知道等分操作的其余

所以如果我们把我们的例子中数字1是devisible由于3,因为

number1 % 3 = 0 (the rest) 
2

Ruby有4个分部操作员。

divmod返回除法和余量

number = 15 
    number.divmod(7) # => 2, 1 

modulo别名%返回余只

number = 15 
    number % 7 # => 1 
    number.modulo(7) # => 1 

div别名如果两个操作数都是整数/返回整数除法,并浮点除法如果任一操作数是一个浮点数。

number = 15 
    number/7 # => 2 
    number.div(7) # => 2 
    1.0 * number/7 # => 2.142857142857143 

fdiv总是返回全精度浮点除法

number = 15 
    number.fdiv(7) # => 2.142857142857143 
+0

'/'是通用划分运算符,而不是“整数除法运算符”。它只对整数进行整数除法。但是,如果任一操作数是一个浮点数,它将返回小数。 –

+0

@sergiotulentsev好赶上,更新了我的答案! – akuhn