Как уменьшить десятичные дроби в запросе POST - PullRequest
0 голосов
/ 01 июля 2019

Мой запрос POST отправляет вывод с 3 десятичными знаками, в то время как значение 1

Я не могу понять, что мне нужно настроить для отправки 1 десятичного знака в запросах POST

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 голосов
/ 01 июля 2019

Предполагая, что вы ссылаетесь на результат sensor.get_temperature(), просто format это на соответствующую ширину, например ::

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

Альтернативный подход (который оставляет float) заключается в использовании функции round :

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

Для случая, когда требуется фактическая строка, я бы рекомендовал отформатировать ее явно (поскольку библиотеки, форматирующие float, могут не соответствовать правилам форматирования Python и могут в конечном итоге предоставить дополнительные десятичные знаки).

Обратите внимание, что правильное округление для обоих случаев дает 23,4, а не 23,3. Если вы действительно хотите укоротить, а не округлить, вы застряли в некрасивом умножении, усечении и делении, например ::1018*

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
...