2013-01-08 1 views
0

지난 주 내내, 대개의 작업 레일 프로젝트는 BigDecimal.to_f에 관해서 나쁘게 작동하기 시작했습니다. to_f 호출 할 때마다 BigDecimal의 수는 0.0로 출력을 가져옵니다ruby ​​1.9.3-p194 rails 3.2.9 BigDecimal to_f는 항상 0.0을 출력합니다.

~/development/rails_project> rails c 
Loading development environment (Rails 3.2.9) 
1.9.3p194 :001 > BigDecimal.new('5').to_f 
=> 0.0 

을 나는 루비 패치 레벨 194 1.9.3 실행 및 레일 3.2.9 해요, 난 항상 가지고. 동일한 버전을 사용하는 동일한 프로젝트에서 작업하는 일부 동료에게는이 문제가 없습니다.

동일한 결과를 가진 Ruby 1.9.3 패치 레벨 362에서도 시도되었습니다. 누구든지 똑같은 문제가 있었고 그것을 극복하는 방법을 알고 있습니까?

감사합니다.

편집 :

내 문제가 그리고 to_s 기능,하지만 to_f하지입니다. 내 문제가 number_to_currency에 있기 때문에 아마 단순화를 통해-: 디버깅와

~/development/rails_project> rails c 
Loading development environment (Rails 3.2.9) 
1.9.3p194 :001 > include ActionView::Helpers::NumberHelper 
=> Object 
1.9.3p194 :002 > BigDecimal.new('5').to_s('F') 
=> "5.0" 
1.9.3p194 :003 > BigDecimal.new('5').to_s 
=> "5.0" 
1.9.3p194 :004 > BigDecimal.new('5').to_f 
=> 0.0 
1.9.3p194 :005 > number_to_currency(5) 
=> "€ 0,00" 

, 나는 number_with_precision 방법으로 좁혀, 더 정확하게 라인 :

rounded_number = BigDecimal.new(number.to_s).round(precision).to_f 

만약 I의 출력 이 선의 다른 부분은 다음과 같은 결과를 얻었습니다.

number = 5.0 
number.to_s = "5.0" 
precision = 2 
BigDecimal.new(number.to_s) = 5.0 
BigDecimal.new(number.to_s).round(precision) = 5.0 
BigDecimal.new(number.to_s).round(precision).to_f = 0.0 

단서가 있습니까?

답변

0

어둠 속에서 그냥 쐈다.이 문제는 Ruby/Rails 콘솔의 로케일 종속 형식 문제 일 수 있습니다.

이 시도 :

BigDecimal.new('5').to_s('F') # Should be "5.0" 
BigDecimal.new('5').to_i  # Should be 5 

를이 예상 결과를으로 출력한다 경우는 콘솔 단지 형식의 문제입니다. to_f 메서드는 실제로 올바른 결과를 반환하지만 콘솔은 결과에 또 to_s을 호출하여 인쇄합니다. 이 경우 5.to_f과 함께 문제를 재현 할 수 있어야합니다.