Drop minus sign on negative zero (#86939)
* Drop minus sign on negative zero * Add tests
This commit is contained in:
parent
5f57648578
commit
d4489faa68
2 changed files with 26 additions and 0 deletions
|
@ -9,6 +9,7 @@ from datetime import date, datetime, timedelta, timezone
|
||||||
from decimal import Decimal, InvalidOperation as DecimalInvalidOperation
|
from decimal import Decimal, InvalidOperation as DecimalInvalidOperation
|
||||||
import logging
|
import logging
|
||||||
from math import ceil, floor, log10
|
from math import ceil, floor, log10
|
||||||
|
import re
|
||||||
from typing import Any, Final, cast, final
|
from typing import Any, Final, cast, final
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
|
@ -84,6 +85,8 @@ _LOGGER: Final = logging.getLogger(__name__)
|
||||||
|
|
||||||
ENTITY_ID_FORMAT: Final = DOMAIN + ".{}"
|
ENTITY_ID_FORMAT: Final = DOMAIN + ".{}"
|
||||||
|
|
||||||
|
NEGATIVE_ZERO_PATTERN = re.compile(r"^-(0\.?0*)$")
|
||||||
|
|
||||||
SCAN_INTERVAL: Final = timedelta(seconds=30)
|
SCAN_INTERVAL: Final = timedelta(seconds=30)
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
@ -647,8 +650,14 @@ class SensorEntity(Entity):
|
||||||
unit_of_measurement,
|
unit_of_measurement,
|
||||||
)
|
)
|
||||||
value = f"{converted_numerical_value:.{precision}f}"
|
value = f"{converted_numerical_value:.{precision}f}"
|
||||||
|
# This can be replaced with adding the z option when we drop support for
|
||||||
|
# Python 3.10
|
||||||
|
value = NEGATIVE_ZERO_PATTERN.sub(r"\1", value)
|
||||||
elif precision is not None:
|
elif precision is not None:
|
||||||
value = f"{numerical_value:.{precision}f}"
|
value = f"{numerical_value:.{precision}f}"
|
||||||
|
# This can be replaced with adding the z option when we drop support for
|
||||||
|
# Python 3.10
|
||||||
|
value = NEGATIVE_ZERO_PATTERN.sub(r"\1", value)
|
||||||
|
|
||||||
# Validate unit of measurement used for sensors with a device class
|
# Validate unit of measurement used for sensors with a device class
|
||||||
if (
|
if (
|
||||||
|
|
|
@ -537,6 +537,15 @@ async def test_custom_unit(
|
||||||
"29.921", # Native precision is 3
|
"29.921", # Native precision is 3
|
||||||
"1013.24", # One digit of precision removed when converting
|
"1013.24", # One digit of precision removed when converting
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
SensorDeviceClass.ATMOSPHERIC_PRESSURE,
|
||||||
|
UnitOfPressure.INHG,
|
||||||
|
UnitOfPressure.HPA,
|
||||||
|
-0.0001,
|
||||||
|
3,
|
||||||
|
"0.000", # Native precision is 3
|
||||||
|
"0.00", # One digit of precision removed when converting
|
||||||
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_native_precision_scaling(
|
async def test_native_precision_scaling(
|
||||||
|
@ -594,6 +603,14 @@ async def test_native_precision_scaling(
|
||||||
"1000.000",
|
"1000.000",
|
||||||
"1000.0000",
|
"1000.0000",
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
SensorDeviceClass.DISTANCE,
|
||||||
|
UnitOfLength.KILOMETERS,
|
||||||
|
1,
|
||||||
|
-0.04,
|
||||||
|
"-0.040",
|
||||||
|
"0.0", # Make sure minus is dropped
|
||||||
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_custom_precision_native_precision(
|
async def test_custom_precision_native_precision(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue