2016-12-24 29 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