From dd2ac72a9a799139befb4025c458c181e911bd03 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Mon, 13 Mar 2023 14:14:17 +0530 Subject: [PATCH] fix: skip 0 for rounding --- frappe/public/js/frappe/utils/number_format.js | 1 + frappe/tests/test_utils.py | 2 ++ frappe/utils/data.py | 3 +++ 3 files changed, 6 insertions(+) diff --git a/frappe/public/js/frappe/utils/number_format.js b/frappe/public/js/frappe/utils/number_format.js index 179c186908..ef4c7366f7 100644 --- a/frappe/public/js/frappe/utils/number_format.js +++ b/frappe/public/js/frappe/utils/number_format.js @@ -189,6 +189,7 @@ function _round(num, precision, rounding_method) { r = d ? r / m : r; return is_negative ? -r : r; } else if (rounding_method == "Banker's Rounding") { + if (num == 0) return 0.0; precision = cint(precision); let multiplier = Math.pow(10, precision); diff --git a/frappe/tests/test_utils.py b/frappe/tests/test_utils.py index ffc8e80acf..dce2a159ac 100644 --- a/frappe/tests/test_utils.py +++ b/frappe/tests/test_utils.py @@ -63,6 +63,7 @@ from frappe.utils.data import ( now_datetime, nowtime, pretty_date, + rounded, to_timedelta, validate_python_code, ) @@ -1094,6 +1095,7 @@ class TestRounding(FrappeTestCase): def test_bankers_rounding(self): rounding_method = "Banker's Rounding" + self.assertEqual(rounded(0, 0, rounding_method=rounding_method), 0) self.assertEqual(flt("0.5", 0, rounding_method=rounding_method), 0) self.assertEqual(flt("0.3", rounding_method=rounding_method), 0.3) diff --git a/frappe/utils/data.py b/frappe/utils/data.py index 26fb50c31b..d76d97f7e0 100644 --- a/frappe/utils/data.py +++ b/frappe/utils/data.py @@ -1117,6 +1117,9 @@ def _round_away_from_zero(num, precision): def _bankers_rounding(num, precision): + if num == 0: + return 0.0 + multiplier = 10**precision num = round(num * multiplier, 12)