mirror of
https://github.com/home-assistant/core.git
synced 2025-07-20 19:57:07 +00:00
Add 'method' parameter to forgiving_round method (#21708)
* Add 'method' parameter to forgiving_round method Fixes #21707 * fix rounding behavior in round() filter * add test cases for new rounding behaviour
This commit is contained in:
parent
548371e94c
commit
f272ed3b91
@ -442,9 +442,17 @@ class TemplateMethods:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def forgiving_round(value, precision=0):
|
def forgiving_round(value, precision=0, method="common"):
|
||||||
"""Round accepted strings."""
|
"""Round accepted strings."""
|
||||||
try:
|
try:
|
||||||
|
# support rounding methods like jinja
|
||||||
|
multiplier = float(10 ** precision)
|
||||||
|
if method == "ceil":
|
||||||
|
value = math.ceil(float(value) * multiplier) / multiplier
|
||||||
|
elif method == "floor":
|
||||||
|
value = math.floor(float(value) * multiplier) / multiplier
|
||||||
|
else:
|
||||||
|
# if method is common or something else, use common rounding
|
||||||
value = round(float(value), precision)
|
value = round(float(value), precision)
|
||||||
return int(value) if precision == 0 else value
|
return int(value) if precision == 0 else value
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
|
@ -97,6 +97,16 @@ class TestHelpersTemplate(unittest.TestCase):
|
|||||||
'{{ states.sensor.temperature.state | multiply(10) | round }}',
|
'{{ states.sensor.temperature.state | multiply(10) | round }}',
|
||||||
self.hass).render()
|
self.hass).render()
|
||||||
|
|
||||||
|
assert '12.7' == \
|
||||||
|
template.Template(
|
||||||
|
'{{ states.sensor.temperature.state | round(1, "floor") }}',
|
||||||
|
self.hass).render()
|
||||||
|
|
||||||
|
assert '12.8' == \
|
||||||
|
template.Template(
|
||||||
|
'{{ states.sensor.temperature.state | round(1, "ceil") }}',
|
||||||
|
self.hass).render()
|
||||||
|
|
||||||
def test_rounding_value_get_original_value_on_error(self):
|
def test_rounding_value_get_original_value_on_error(self):
|
||||||
"""Test rounding value get original value on error."""
|
"""Test rounding value get original value on error."""
|
||||||
assert 'None' == \
|
assert 'None' == \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user