diff --git a/homeassistant/helpers/template.py b/homeassistant/helpers/template.py
index d79c68ffd5e..24275c87061 100644
--- a/homeassistant/helpers/template.py
+++ b/homeassistant/helpers/template.py
@@ -442,10 +442,18 @@ class TemplateMethods:
         return None
 
 
-def forgiving_round(value, precision=0):
+def forgiving_round(value, precision=0, method="common"):
     """Round accepted strings."""
     try:
-        value = round(float(value), precision)
+        # 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)
         return int(value) if precision == 0 else value
     except (ValueError, TypeError):
         # If value can't be converted to float
diff --git a/tests/helpers/test_template.py b/tests/helpers/test_template.py
index 73fe36af26d..e0aeb09976d 100644
--- a/tests/helpers/test_template.py
+++ b/tests/helpers/test_template.py
@@ -97,6 +97,16 @@ class TestHelpersTemplate(unittest.TestCase):
                 '{{ states.sensor.temperature.state | multiply(10) | round }}',
                 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):
         """Test rounding value get original value on error."""
         assert 'None' == \