diff --git a/magnivore/Lexicon.py b/magnivore/Lexicon.py
index 84ae7a2..acf038b 100644
--- a/magnivore/Lexicon.py
+++ b/magnivore/Lexicon.py
@@ -2,6 +2,7 @@
 import re
 from decimal import Decimal
 from functools import reduce
+from math import ceil, floor
 
 from .Tracker import Tracker
 
@@ -40,7 +41,12 @@ class Lexicon:
         """
         value = cls._dot_reduce(rule['from'], target)
         original_type = type(value)
-        return original_type(Decimal(value) * Decimal(rule['factor']))
+        result = Decimal(value) * Decimal(rule['factor'])
+        if 'round' in rule:
+            if rule['round'] == 'up':
+                return original_type(ceil(result))
+            return original_type(floor(result))
+        return original_type(result)
 
     @classmethod
     def format(cls, rule, target):

diff --git a/tests/unit/Lexicon.py b/tests/unit/Lexicon.py
index f1c85d6..3af833c 100644
--- a/tests/unit/Lexicon.py
+++ b/tests/unit/Lexicon.py
@@ -65,6 +65,19 @@ def test_lexicon_factor(from_data, target, expected):
     assert type(result) == type(expected)
 
 
+@mark.parametrize('rounding, expected', [
+    ('down', 47),
+    ('up', 48)
+])
+def test_lexicon_factor_round(rounding, expected):
+    rule = {
+        'from': 'value',
+        'round': rounding,
+        'factor': 0.5
+    }
+    assert Lexicon.factor(rule, MagicMock(value=95)) == expected
+
+
 @mark.parametrize('from_data, format, expected', [
     ('birthyear', '{}-0-0', '1992-0-0'),
     (['birthyear', 'birthmonth'], '{}-{}-0', '1992-9-0')

Add possibility to specify whether to round up or down in factor
tests/unit/Lexicon.py::test_lexicon_factor_round[up-48]
tests/unit/Lexicon.py::test_lexicon_basic tests/unit/Lexicon.py::test_lexicon_basic_dot tests/unit/Lexicon.py::test_lexicon_basic_dot_double tests/unit/Lexicon.py::test_lexicon_basic_null[field] tests/unit/Lexicon.py::test_lexicon_basic_null[table.field] tests/unit/Lexicon.py::test_lexicon_basic_null[table.field.nested] tests/unit/Lexicon.py::test_lexicon_transform[target0] tests/unit/Lexicon.py::test_lexicon_transform[target1] tests/unit/Lexicon.py::test_lexicon_factor[value-target0-50] tests/unit/Lexicon.py::test_lexicon_factor[value-target1-expected1] tests/unit/Lexicon.py::test_lexicon_factor[value-target2-50.0] tests/unit/Lexicon.py::test_lexicon_factor[related.value-target3-50] tests/unit/Lexicon.py::test_lexicon_factor_round[down-47] tests/unit/Lexicon.py::test_lexicon_format[birthyear-{}-0-0-1992-0-0] tests/unit/Lexicon.py::test_lexicon_format[from_data1-{}-{}-0-1992-9-0] tests/unit/Lexicon.py::test_lexicon_format_dot[rel.birthyear-{}-0-0-1992-0-0] tests/unit/Lexicon.py::test_lexicon_format_dot[from_data1-{}-{}-0-1992-9-0] tests/unit/Lexicon.py::test_lexicon_match tests/unit/Lexicon.py::test_lexicon_match_none tests/unit/Lexicon.py::test_lexicon_match_from tests/unit/Lexicon.py::test_lexicon_match_dot tests/unit/Lexicon.py::test_lexicon_match_from_none tests/unit/Lexicon.py::test_lexicon_match_none_log tests/unit/Lexicon.py::test_lexicon_sync tests/unit/Lexicon.py::test_lexicon_sync_none tests/unit/Lexicon.py::test_lexicon_static tests/unit/Lexicon.py::test_lexicon_expression tests/unit/Lexicon.py::test_lexicon_expression_dot tests/unit/Lexicon.py::test_lexicon_expression_none