在Python中循环到任意精度的有效方法

Rol*_*Bly 7 python if-statement

什么是以下的Pythonic解决方案?

我正在读一个分辨率为.5的温度传感器.我需要写入它(它具有可编程恒温器输出),也具有.5分辨率.

所以我编写了这个函数(Python 2.7)来将一个浮点数作为输入舍入到最接近的.5:

def point5res(number):
    decimals = number - int(number)
    roundnum = round(number, 0)
    return roundnum + .5 if .25 <= decimals < .75 else roundnum

print point5res (6.123)

print point5res(6.25)

print point5res(6.8)
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,分别输出6.0,6.5和7.0.这就是我想要的.

我对Python比较陌生.这条线

return roundnum + .5 if .25 <= decimals < .75 else roundnum
Run Code Online (Sandbox Code Playgroud)

让我对它的实施者表示钦佩.但它是Pythonic吗?

编辑:自发布以来,我学到了更多关于什么是'Pythonic'的内容.我的代码不是.Cmd的下面是.谢谢!

cmd*_*cmd 8

如果你保持表达式简单,它们被认为是pythonic,否则它变得难以阅读.

我会像这样四舍五入到最接近的0.5:

round(number*2) / 2.0
Run Code Online (Sandbox Code Playgroud)

或更一般地说:

def roundres(num, res):
    return round(num / res) * res
Run Code Online (Sandbox Code Playgroud)