ruby 当数字不以小数结尾时,计算返回0的困惑

sq1bmfud  于 2023-04-20  发布在  Ruby
关注(0)|答案(1)|浏览(138)

我是新来的编码,我写了一些快速计算装甲对某些敌人的基础上的水平为WoTLK经典,所以我不必继续回到Wolfram阿尔法。
问题是

def BossArmor(armor)

    result = ((armor / (armor + 16635)) * 100)
    puts result

end

返回0,而

def BossArmor(armor)

    result = ((armor / (armor + 16635.0)) * 100)
    puts result

end

返回正确的金额(59.54228178125835)
完整的代码,如果这很重要的话

def RegularArmor(armor)

    result = ((armor / (armor + 15232.5)) * 100)
    puts result

end

def BossArmor(armor)

    result = ((armor / (armor + 16635.0)) * 100)
    puts result

end

def GetArmorSafely
    puts "How much armor do you have?"
    armor = gets

    if armor =~ /^-?[0-9]+$/
        armor = armor.to_i
        RegularArmor(armor)
        BossArmor(armor)
    else
        puts "Invalid input, only integers are accepted."
        GetArmorSafely()
    end

end

GetArmorSafely()

我假设这与.0使其成为浮点数/十进制或类似的东西有关,但我无法理解为什么它没有它就返回0。也许这与我将输入字符串转换为整数有关?
据我所知,我只是把一个整数放入一个简单的计算中。
任何答案将不胜感激。

2ic8powd

2ic8powd1#

当两个整数相除时,结果是一个整数。

irb(main):001:0> 1 / 2
=> 0

但如果其中一个是浮点数,则结果将是浮点数。

irb(main):002:0> 1 / 2.0
=> 0.5

可以使用#to_f方法将Integer转换为Float

irb(main):005:0> 1.to_f / 2
=> 0.5

也可以使用#fdiv方法。

irb(main):007:0> 1.fdiv(2)
=> 0.5

相关问题