2010-06-23 10 views
6

ActiveRecord 열 유형을 소수로 지정하면 Rails는 해당 데이터베이스 값을 루비 BigDecimal 객체로 반환합니다.Ruby on Rails 십진수 열

제 질문은이 필드를 사용하고 추가 계산을 수행 할 때 항상 계산에 BigDecimal 값을 사용해야하는지 아니면 사용할 수있는 부동 소수점 값인지를 묻는 것입니다. 동일한 계산에서 BigDecimal 값과 부동 소수점 값을 혼합하는 것이 좋은 방법인지는 몰랐습니다.

혼합 예 : BigDecimal.new ('12 .43 ')/4.2

같은 유형의 예 : BigDecimal.new ('12 .43')/BigDecimal.new ('4.2')

물어 이유 왜냐하면 나는 십진수의 정확성이 필요하기 때문에 나는 수레를 사용하는 것을 꺼려한다. 0.1 + 0.7은 부동 소수점을 사용하여 0.8이되지 않습니다.

답변

2

당신이

... 수레를 사용 수줍음 조금 총 ...

사용의 BigDecimal을 것입니다. 잘 작동합니다.

+1

예, 저는 BigDecimal을 사용해야한다고 생각합니다. 내 질문에 계산에있는 모든 숫자에 대해 BigDecimal을 사용해야합니까? 나는 약간의 테스트를 수행했고, 만약 당신이 BigDecimal.new ('1.2') + 1.1을 리턴한다면 리턴 값은 BigDecimal이 아닌 float가 될 것이다. 그래서 ActiveRecords Decimal 컬럼을 처리 할 때 내부적으로 BigDecimal을 사용하기 때문에 모든 BigDecimal 숫자를 사용하는 것이 가장 좋습니다. 그래서 계산이 위험한 부동 소수점 연산 문제로 이어질 위험이 있습니까? – Dale

+0

Re : BigDecimal.new ('1.2') + 1.1은 float를 반환합니다. 네가 옳아. 이 경우 BigDecimal 객체 만 사용해야합니다. 출력 할 때만 변환하십시오. –

+0

또한 0보다는 BigDecimal.new ('0.0')를 사용해야 함을 기억하십시오. –