From: Iskren Chernev Date: Tue, 26 Dec 2023 17:51:59 +0000 (+0200) Subject: Revert "Merge pull request #5597 from Alanscut:issue-5596" X-Git-Tag: 2.30.0~5 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=15b82f532c41c86f0cfa7462d0057d1d95e67821;p=thirdparty%2Fmoment.git Revert "Merge pull request #5597 from Alanscut:issue-5596" This reverts commit b4e0676927f8acae8a3e8fea45fe47a8f1ddc62f, reversing changes made to cbcd0c5116e43ebd569e050934aeaef622ba7b64. --- diff --git a/src/lib/duration/constructor.js b/src/lib/duration/constructor.js index a315cd1fe..6033769b7 100644 --- a/src/lib/duration/constructor.js +++ b/src/lib/duration/constructor.js @@ -1,7 +1,6 @@ import { normalizeObjectUnits } from '../units/aliases'; import { getLocale } from '../locale/locales'; import isDurationValid from './valid.js'; -import multiply from '../utils/float-calculate'; export function Duration(duration) { var normalizedInput = normalizeObjectUnits(duration), @@ -20,10 +19,9 @@ export function Duration(duration) { // representation for dateAddRemove this._milliseconds = +milliseconds + - // reduce floating point rounding errors - multiply(seconds, 1e3) + - multiply(minutes, 6e4) + - multiply(hours, 36e5); + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 // Because of dateAddRemove treats 24 hours as different from a // day when working around DST, we need to store them separately this._days = +days + weeks * 7; diff --git a/src/lib/utils/float-calculate.js b/src/lib/utils/float-calculate.js deleted file mode 100644 index 3753a6073..000000000 --- a/src/lib/utils/float-calculate.js +++ /dev/null @@ -1,33 +0,0 @@ -export default function multiply(a, b) { - var bi1 = toBigInt(parseFloat(a)), - bi2 = toBigInt(parseFloat(b)), - mag1 = bi1.magnification, - mag2 = bi2.magnification, - num1 = bi1.num, - num2 = bi2.num; - return (num1 * num2) / (mag1 * mag2); -} - -function toBigInt(floatNum) { - var bigInt = { - num: 0, - magnification: 1, - }, - strNum, - len, - mag, - intNum; - - if (Math.floor(floatNum) === floatNum) { - bigInt.num = floatNum; - return bigInt; - } - - strNum = floatNum.toString(); - len = strNum.length - strNum.indexOf('.') - 1; - mag = Math.pow(10, len); - intNum = Number(floatNum.toString().replace('.', '')); - bigInt.num = intNum; - bigInt.magnification = mag; - return bigInt; -} diff --git a/src/test/moment/duration.js b/src/test/moment/duration.js index 5b832f492..7c1846596 100644 --- a/src/test/moment/duration.js +++ b/src/test/moment/duration.js @@ -248,15 +248,6 @@ test('instantiation from another duration', function (assert) { }); test('explicit cloning', function (assert) { - var duration = moment.duration(1.1234, 'hours'); - assert.equal( - duration.milliseconds(), - 240, - 'Float number calculation will not lose accuracy' - ); -}); - -test('float number calculation', function (assert) { var durationA = moment.duration(5, 'milliseconds'), durationB = durationA.clone(); durationA.add(5, 'milliseconds');