2014-07-19 3 views
22

부동 소수점을 반올림하여 반올림하려합니다.파이썬에서 가장 가까운 0.5로 부동 소수점을 반올림합니다.

예를 들어,

1.3 -> 1.5 
2.6 -> 2.5 
3.0 -> 3.0 
4.1 -> 4.0 

이 내가 가장 가까운 정수로 숫자의

def round_of_rating(number): 
     return round((number * 2)/2) 

이 순찰을하고있어 것입니다. 이 작업을 수행하는 올바른 방법은 무엇입니까? 반올림에 의해 분할하기 전에 발생하도록

+10

귀하의 솔루션은 괜찮지 만, 당신의 괄호는 잘못 배치됩니다. 'round (number * 2.0)/2.0'을 원한다. –

+0

@ MarkDickinson 감사합니다. –

+0

@julienc : 반올림 규칙이 완전히 다르기 때문에 중복되지 않습니다. –

답변

38

봅니다 괄호의 위치를 ​​변경하려면 2

def round_of_rating(number): 
    """Round a number to the closest half integer. 
    >>> round_of_rating(1.3) 
    1.5 
    >>> round_of_rating(2.6) 
    2.5 
    >>> round_of_rating(3.0) 
    3.0 
    >>> round_of_rating(4.1) 
    4.0""" 

    return round(number * 2)/2 

편집 : 추가 된 doctest 수 문서화 문자열 :

>>> import doctest 
>>> doctest.testmod() 
TestResults(failed=0, attempted=4) 
+3

'/ 2'는 실수로 플로어 디비젼을 사용하는 것에 신경이 쓰이지 만, 파이썬 2와 파이썬 3 모두 괜찮다는 것이 밝혀졌습니다 : 파이썬 2에서는'round'가 float 정수 입력이라 할지라도 파이썬 3에서'/'는 바닥 나누기보다는 실제 나누기를합니다! 그럼에도 불구하고 나는 여전히 코드의 독자가 같은 정신 검사를 통과하지 못하도록하기 위해'2.0'을 사용할 것입니다. –

+2

BTW, 숫자는 일반화 할 수 있습니다. 가장 가까운 3, 4, 5 등을 찾을 수 있습니다. 2를 다른 숫자로 변경하면됩니다. 그러나 불합리한 숫자를 조심하십시오. – CMCDragonkai

관련 문제