2014-10-05 4 views
1

루비에서는 printf을 사용하여 소수점 이하의 특정 자리수로 인쇄 할 숫자를 포맷 할 수 있다는 것을 알고 있습니다. 1.2 -> 1.20 등 내가 알고 싶은 것은 어떻게 나중에 변수를 사용할 수 있도록 변수에 소수점 이하의 숫자를 할당 할 수 있는지입니다. 계산에서 더 정확한 숫자를 사용해야하고 어떻게하는지 설명하는 곳을 찾을 수 없습니다. 나는이 대답을 보았습니다 here 레일의 특정 버전에 대한 것 같습니다, 그리고 혼자 루비를 사용하고 있습니다. number_to_precision으로 약간 놀아 봤지만 Ruby에 익숙하지 않고 구현 방법을 여전히 이해하지 못했습니다. 이것을 할 수 있습니까?변수에 특정 소수점 이하의 숫자 저장하기

+0

_more 정확한 숫자로 무엇을 의미합니까? –

+0

제 질문에 명시된 바와 같이 1.2와 같은 값을 반환하는 대신 1.20, 1.21 등과 같이 더 구체적인 것을 필요로합니다. – Luminusss

+0

'1.2'는'1.20'보다 정확하지 않습니다. 둘 다 같은 값입니다. . 당신이 필요로하는 것이 정밀도인지 또는 특정 자리수를 갖기 위해 숫자가 필요합니까? –

답변

2

메서드 number_with_precision은보기 전용 도우미 메서드이며 숫자의 문자열 버전을 반환합니다. 그것은 당신이 찾고있는 경우 지정된 정밀도로 숫자를 반환하지 않습니다. 좋은 소식은 number_with_precision이 정확히 무엇인지 알고 싶다면 sprintf을 사용할 수 있습니다.

sprintf('%.2f', 3.1415926) # result: "3.14" 

sprintfprintf이하는 것처럼 stdout에 인쇄하는 대신, 당신이 저장할 수있는 값을 반환합니다. 그래서 당신은 쉽게 캡처 할 수 있습니다 :

number = sprintf('%.2f', 3.1415926) 

당신이 숫자로 취급하고 싶었다면, 당신은 아마 당신을 위해이 작업을 수행하고 필요로하고 플로트에서 변환하는 클래스를 만들 수있다.

+0

그럼이 경우 문자열로 저장합니까? 그리고 나서 정확히 완벽하게 작동하는 float – Luminusss

+0

으로 변환해야합니다. 감사합니다! 변수를 저장하는 데 사용할 수 있는지 몰랐습니다. – Luminusss

+1

네,하지만 이것은 Rails의 number_with_precision에도 해당됩니다. 그런 다음 숫자에'.to_f'를 호출하여 부동 소수점을 가져올 수 있습니다. 원하는 경우 문자열 대신 저장할 수 있지만 후행 0은 모두 잃게됩니다. –

1

루비에서 임의의 부동 소수점 정밀도 숫자를 얻으려면 BigDecimal 개체를 사용하여 계산을 수행하십시오.

이 클래스는 필요에 따라 도트 뒤에 숫자를 사용하며 10 진수를 2 진수로 변환하여 반올림 오류가 발생하지 않도록합니다.

관련 문제