这个条件测试真正做了什么?

时间:2014-09-29 15:52:23

标签: ruby

我真的不明白 price =(amount)方法中以下条件测试的实用性......

class Ticket
    attr_accessor :price
    def initialize(price)
        @price=price
        puts "The price is #{price}"
    end
    def price=(amount)
        if (amount*100).to_i==amount*100
            @price=amount
            puts "The new price is #{amount}"
        else
            puts "The price seems to be malformed"
        end
    end
end
x=Ticket.new(21)
x.price=100.22

如何检查输入是否格式错误?我是初学者,抱歉。我不能理解它背后的逻辑。

2 个答案:

答案 0 :(得分:1)

你尝试弄清楚了什么?

第一步是打开Ruby的IRB(或Pry)并输入有问题的部分并捅它。例如,这就是我在Pry中捅它时得到的结果:

[1] (pry) main: 0> amount = 1
1
[2] (pry) main: 0> (amount*100).to_i==amount*100
true
[3] (pry) main: 0> amount = 1.0
1.0
[4] (pry) main: 0> (amount*100).to_i==amount*100
true
[5] (pry) main: 0> amount = 0.1
0.1
[6] (pry) main: 0> (amount*100).to_i==amount*100
true
[7] (pry) main: 0> amount = 0.001
0.001
[8] (pry) main: 0> (amount*100).to_i==amount*100
false

在查看输出后,发生了什么?

答案 1 :(得分:0)

由于Ruby没有强类型,我似乎试图验证两件事:

  • 输入是整数或浮点数
  • 不超过两位数(5.331为NOK,5.33为OK)

换句话说,检查确认数字为两位数的数字与原始数字相同。

例:

(5.331*100)=533.1
(5.331*100).to_i=533

最后一位数字已丢失....

在编程方面,这可能不是最好的方法,在这种情况下报告错误的例外情况更好