From 1071aa21ab310a51ebb2654840caafb59b95c36c Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Thu, 7 Jun 2018 10:59:17 +0200 Subject: [PATCH] FIX: slightly safer rounding --- app/assets/javascripts/discourse/helpers/application.js.es6 | 2 +- app/assets/javascripts/discourse/lib/formatter.js.es6 | 2 +- test/javascripts/lib/formatter-test.js.es6 | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/discourse/helpers/application.js.es6 b/app/assets/javascripts/discourse/helpers/application.js.es6 index 997f2f07b2a..96e3f5f4b6c 100644 --- a/app/assets/javascripts/discourse/helpers/application.js.es6 +++ b/app/assets/javascripts/discourse/helpers/application.js.es6 @@ -8,7 +8,7 @@ registerUnbound('raw-date', dt => longDate(new Date(dt))); registerUnbound('age-with-tooltip', dt => new safe(autoUpdatingRelativeAge(new Date(dt), {title: true}))); registerUnbound('number', (orig, params) => { - orig = parseInt(Math.round(orig), 10); + orig = Math.round(parseFloat(orig)); if (isNaN(orig)) { orig = 0; } let title = I18n.toNumber(orig, { precision: 0 }); diff --git a/app/assets/javascripts/discourse/lib/formatter.js.es6 b/app/assets/javascripts/discourse/lib/formatter.js.es6 index 2c213e86231..50f69042342 100644 --- a/app/assets/javascripts/discourse/lib/formatter.js.es6 +++ b/app/assets/javascripts/discourse/lib/formatter.js.es6 @@ -304,7 +304,7 @@ export function relativeAge(date, options) { export function number(val) { let formattedNumber; - val = parseInt(Math.round(val), 10); + val = Math.round(parseFloat(val)); if (isNaN(val)) val = 0; if (val > 999999) { diff --git a/test/javascripts/lib/formatter-test.js.es6 b/test/javascripts/lib/formatter-test.js.es6 index d00bade3dcd..984f689a63c 100644 --- a/test/javascripts/lib/formatter-test.js.es6 +++ b/test/javascripts/lib/formatter-test.js.es6 @@ -211,10 +211,13 @@ QUnit.test("number", assert => { assert.equal(number(NaN), "0", "it returns 0 for NaN"); assert.equal(number(3333), "3.3k", "it abbreviates thousands"); assert.equal(number(2499999), "2.5M", "it abbreviates millions"); + assert.equal(number("2499999.5"), "2.5M", "it abbreviates millions"); assert.equal(number(1000000), "1.0M", "it abbreviates a million"); assert.equal(number(999999), "999k", "it abbreviates hundreds of thousands"); assert.equal(number(18.2), "18", "it returns a float number rounded to an integer as a string"); assert.equal(number(18.6), "19", "it returns a float number rounded to an integer as a string"); + assert.equal(number("12.3"), "12", "it returns a string float rounded to an integer as a string"); + assert.equal(number("12.6"), "13", "it returns a string float rounded to an integer as a string"); }); QUnit.test("durationTiny", assert => {