我的POST请求发送的输出为3个小数,而希望的是1
我无法理解在POST请求中应该发送1个小数点的内容
conn = http.client.HTTPConnection("127.0.0.1:8080")
for sensor in W1ThermSensor.get_available_sensors():
print("Sensor %s with id %s has temperature %.2f" % (sensorNameList.get(sensor.id), sensor.id, sensor.get_temperature()))
try:
params = urllib.parse.urlencode({'temperature': sensor.get_temperature()})
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
conn.request("POST", "/WeatherStationServer/api/temperature/" + sensorNameList.get(sensor.id), params, headers)
输出为23.357,而应为23.3
答案 0 :(得分:0)
假设您引用的是sensor.get_temperature()
的结果,只需将format
it调整为适当的宽度,例如:
params = urllib.parse.urlencode({'temperature': format(sensor.get_temperature(), '.1f')})
另一种方法(留下float
)是使用the round
function:
params = urllib.parse.urlencode({'temperature': round(sensor.get_temperature(), 1)})
对于需要实际字符串的情况,我建议显式格式化它(因为格式化float
的库可能不遵循Python的格式化规则,并且可能最终会提供额外的小数位)。 / p>
请注意,两种情况的正确舍入均产生23.4,而不是23.3。如果您确实想截断而不是舍入,那么就很难进行乘法,截断和除法,例如:
params = urllib.parse.urlencode({'temperature': round(int(sensor.get_temperature() * 10) / 10, 1)})
由于转换为int
会明确删除尾随的小数位,因此这将计算以下值:
233.57
int
转换后,233
23.3
round
之后(处理浮点不精确度可能会除以10产生一个以上的小数点的情况下,很有必要):23.3