Ruby Modulo Division

16,049

Solution 1

It's because firstnum and secondnum are the strings "70" and "6". And String#% is defined - it's the formatted-output operator.

Since "70" is not a format string, it's treated as a literal; so "70" % "6" prints "6" formatted according to the template "70", which is just "70".

You need to convert your input with firstnum = $_.to_i etc.

Solution 2

Modulo seems to have trouble with strings, for example, in irb:

"70" % "6" => "70"

try making your return statement:

return op1.to_i % op2.to_i
Share:
16,049
Billjk
Author by

Billjk

please delete me

Updated on June 14, 2022

Comments

  • Billjk
    Billjk almost 2 years

    So I made a program to do modulo division in Ruby, using a module:

    module Moddiv
        def Moddiv.testfor(op1, op2)
            return op1 % op2
        end
    end
    

    Program:

    require 'mdivmod'
    print("Enter the first number: ")
    gets
    chomp
    firstnum = $_
    print("Enter the second number: ")
    gets
    chomp
    puts
    secondnum = $_
    puts "The remainder of 70/6 is " + Moddiv.testfor(firstnum,secondnum).to_s
    

    When I run it with two numbers, say 70 and 6, I get 70 as the output! Why is this happening?

  • coder_tim
    coder_tim about 12 years
    @Chowlett has a better explanation (and beat me by 21 seconds!)