如何减少POST请求中的小数

时间:2019-07-01 16:03:25

标签: python python-3.x decimal

我的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

1 个答案:

答案 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会明确删除尾随的小数位,因此这将计算以下值:

  1. 相乘233.57
  2. int转换后,233
  3. 除法后,23.3
  4. round之后(处理浮点不精确度可能会除以10产生一个以上的小数点的情况下,很有必要):23.3