首页 > 解决方案 > 如何减少 POST 请求中的小数

问题描述

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

标签: pythonpython-3.xdecimal

解决方案


假设您指的是 的结果sensor.get_temperature(),只需format将其调整为适当的宽度,例如:

params = urllib.parse.urlencode({'temperature': format(sensor.get_temperature(), '.1f')})

另一种方法(留下 a float)是使用round函数

params = urllib.parse.urlencode({'temperature': round(sensor.get_temperature(), 1)})

对于需要实际字符串的情况,我建议明确格式化它(因为格式化 a 的库float可能不遵循 Python 的格式化规则,并且最终可能会提供额外的小数位)。

请注意,这两种情况的正确舍入都会产生 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

推荐阅读