2009-07-15 5 views
1

나는 현재 부동 소수점 숫자를 반올림하려고하지만 난 같은 오류 메시지가 얻을 : 플로트 16.666667에 대한 정의되지 않은 방법 round_to을 .. 및 반올림에 대한 내 코드어떤 종류의 데이터 유형을 반올림 할 수 있습니까?

option = [keys[count], (((o.poll_votes.count.to_f)/@general_poll.poll_votes.count.to_f)*100).round_to(1)] 

입니다 그리고 무엇 가장 나를 suprises하는 것입니다 나는 여러 곳에서이 코드를 사용했지만 잘 작동하지만 오류가 발생하고있다.

미리 감사드립니다.

답변

4

round_to 메소드는 루비 코어의 어느 곳에도 존재하지 않습니다. 대부분이 기능은 이전에 사용하던 라이브러리에 포함되었지만 현재 프로젝트에서 필요하지는 않습니다. 빠른 검색 후이 기능이 Ruby Facets 라이브러리에 포함 된 것처럼 보입니다. 이 문서가이 기능을 직접 추가 할 수

gem install facets 

확인 : http://www.hans-eric.com/code-samples/ruby-floating-point-round-off/

FTA : 우리는 사용자 정의 추가 Float 클래스에 메소드를 둥글게 할 수있는 작은 원숭이 패치와

.

class Float 
    def round_to(x) 
    (self * 10**x).round.to_f/10**x 
    end 

    def ceil_to(x) 
    (self * 10**x).ceil.to_f/10**x 
    end 

    def floor_to(x) 
    (self * 10**x).floor.to_f/10**x 
    end 
end 

------------------ 싹둑 8 < -------------------

+0

도서관에 아무것도 없다는 것을 깨달았습니다.이 원숭이 패치를 어떻게 사용할 수 있는지 자세히 설명해 주시겠습니까? 어쨌든 응답 주셔서 감사합니다. –

+0

Monkey patching은 이미 정의 된 클래스에 메소드를 추가하는 것입니다. 이 코드를 프로젝트에 추가하면 Float가 확장되고 메서드를 사용할 수 있습니다. 나는 패싯 보석을 체크 아웃했고 그들은 round_to와 round_at의 두 가지 방법을 가지고있는 것으로 보인다. round_at는 위에 게시 된 코드를 모방합니다. 혼란을 야기한 경우 미안합니다. –

+0

내 응용 프로그램에서'round_to (5) '와 같이 불필요한 잔여 숫자를 피하기 위해'(self * 10 ** x) .round' 다음에 3 행의'.to_f'를 제거해야했습니다. '경사 = -0.4123800000000001' – Marcos

관련 문제