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
|
||||
import logging
|
||||
from math import ceil, floor, log10
|
||||
import re
|
||||
from typing import Any, Final, cast, final
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
|
@ -84,6 +85,8 @@ _LOGGER: Final = logging.getLogger(__name__)
|
|||
|
||||
ENTITY_ID_FORMAT: Final = DOMAIN + ".{}"
|
||||
|
||||
NEGATIVE_ZERO_PATTERN = re.compile(r"^-(0\.?0*)$")
|
||||
|
||||
SCAN_INTERVAL: Final = timedelta(seconds=30)
|
||||
|
||||
__all__ = [
|
||||
|
@ -647,8 +650,14 @@ class SensorEntity(Entity):
|
|||
unit_of_measurement,
|
||||
)
|
||||
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:
|
||||
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
|
||||
if (
|
||||
|
|
|
@ -537,6 +537,15 @@ async def test_custom_unit(
|
|||
"29.921", # Native precision is 3
|
||||
"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(
|
||||
|
@ -594,6 +603,14 @@ async def test_native_precision_scaling(
|
|||
"1000.000",
|
||||
"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(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue