номер типа поплавков не работает правильно - PullRequest
0 голосов
/ 06 декабря 2010
  describe "common methods" do

    it "should get right settlement percent" do
      contract = Contract.new
      contract.settlement_percent = 1.1 / 100.0
      contract.settlement_percent.to_f.should == 0.011 
      contract.settlement_percent.to_s.should == "0.011"
    end

  end

1) Contract common methods should 
 Failure/Error: contract.settlement_percent.to_f.should == 0.011
 expected: 0.011,
      got: 0.011000000000000001 (using ==)

Ответы [ 3 ]

2 голосов
/ 06 декабря 2010

Вы можете использовать метод be_close для учета этой проблемы аппроксимации. Просто передайте ему значение и насколько близко вы хотите, чтобы сравнение было.

Что-то вроде этого должно работать для вас:

contract.settlement_percent.to_f.should be_close(0.011, 0.0001)

Еще немного о be_close здесь ...

0 голосов
/ 06 декабря 2010
0 голосов
/ 06 декабря 2010

Значения с плавающей точкой Base-10 всегда аппроксимируются, поскольку они закодированы в двоичном виде. Не стоит ожидать, что значения будут такими точными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...