summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/core
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js/core')
-rw-r--r--addons/web/static/src/js/core/utils.js10
1 files changed, 9 insertions, 1 deletions
diff --git a/addons/web/static/src/js/core/utils.js b/addons/web/static/src/js/core/utils.js
index 699a912ccc3..93e9bda5593 100644
--- a/addons/web/static/src/js/core/utils.js
+++ b/addons/web/static/src/js/core/utils.js
@@ -571,7 +571,15 @@ var utils = {
* @param {Number} decimals the number of decimals. eg: round_decimals(3.141592,2) -> 3.14
*/
round_decimals: function (value, decimals) {
- return utils.round_precision(value, Math.pow(10,-decimals));
+ /**
+ * The following decimals introduce numerical errors:
+ * Math.pow(10, -4) = 0.00009999999999999999
+ * Math.pow(10, -5) = 0.000009999999999999999
+ *
+ * Such errors will propagate in round_precision and lead to inconsistencies between Python
+ * and JavaScript. To avoid this, we parse the scientific notation.
+ */
+ return utils.round_precision(value, parseFloat('1e' + -decimals));
},
/**
* performs a half up rounding with arbitrary precision, correcting for float loss of precision