Skip to content

Commit

Permalink
Fix rounding errors in fallback format function.
Browse files Browse the repository at this point in the history
Issues due to floating point errors in `toFixed`.
Ignoring the floating point errors coming from Moment.js for now.

Fixes #93.
  • Loading branch information
John Sharp Madhavan-Reese committed Jan 13, 2018
1 parent fe2782c commit b124240
Show file tree
Hide file tree
Showing 4 changed files with 3,902 additions and 1,716 deletions.
3 changes: 1 addition & 2 deletions lib/moment-duration-format.js
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,7 @@
} else {
// Workaround for floating point errors in `toFixed`.
// (3.55).toFixed(1); --> "3.5"
//numberString = precisionRound(number, fractionDigits).toString();
numberString = number.toFixed(fractionDigits);
numberString = precisionRound(number, fractionDigits).toString();
}

var integerString;
Expand Down
6 changes: 5 additions & 1 deletion test/moment-duration-format-tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,11 @@ test("Using Only Settings Argument", function () {
}), "51 days, 10.5 hours");
});

test("Floating point errors in Moment.js", function () {
test("Floating point errors", function () {
equal(moment.duration(3.55, "hours").format("h", 1), "3.6");
});

QUnit.skip("Floating point errors in Moment.js", function () {
equal(moment.duration(123.55, "hours").format("d[d] h[h]", 1), "5d 3.6h");
equal(moment.duration(1234.55, "hours").format({
template: "d [days], h [hours]",
Expand Down
165 changes: 113 additions & 52 deletions test/vendor/qunit.css
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
/**
* QUnit v1.12.0 - A JavaScript Unit Testing Framework
/*!
* QUnit 1.23.1
* https://qunitjs.com/
*
* http://qunitjs.com
* Copyright jQuery Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Copyright 2012 jQuery Foundation and other contributors
* Released under the MIT license.
* http://jquery.org/license
* Date: 2016-04-12T17:29Z
*/

/** Font Family and Sizes */

#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult {
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
}

#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
#qunit-testrunner-toolbar, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
#qunit-tests { font-size: smaller; }


/** Resets */

#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
#qunit-tests, #qunit-header, #qunit-banner, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
margin: 0;
padding: 0;
}
Expand All @@ -31,54 +32,69 @@
#qunit-header {
padding: 0.5em 0 0.5em 1em;

color: #8699a4;
background-color: #0d3349;
color: #8699A4;
background-color: #0D3349;

font-size: 1.5em;
line-height: 1em;
font-weight: normal;
font-weight: 400;

border-radius: 5px 5px 0 0;
-moz-border-radius: 5px 5px 0 0;
-webkit-border-top-right-radius: 5px;
-webkit-border-top-left-radius: 5px;
}

#qunit-header a {
text-decoration: none;
color: #c2ccd1;
color: #C2CCD1;
}

#qunit-header a:hover,
#qunit-header a:focus {
color: #fff;
color: #FFF;
}

#qunit-testrunner-toolbar label {
display: inline-block;
padding: 0 .5em 0 .1em;
padding: 0 0.5em 0 0.1em;
}

#qunit-banner {
height: 5px;
}

#qunit-testrunner-toolbar {
padding: 0.5em 0 0.5em 2em;
padding: 0.5em 1em 0.5em 1em;
color: #5E740B;
background-color: #eee;
background-color: #EEE;
overflow: hidden;
}

#qunit-filteredTest {
padding: 0.5em 1em 0.5em 1em;
background-color: #F4FF77;
color: #366097;
}

#qunit-userAgent {
padding: 0.5em 0 0.5em 2.5em;
background-color: #2b81af;
color: #fff;
padding: 0.5em 1em 0.5em 1em;
background-color: #2B81AF;
color: #FFF;
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
}

#qunit-modulefilter-container {
float: right;
padding: 0.2em;
}

.qunit-url-config {
display: inline-block;
padding: 0.1em;
}

.qunit-filter {
display: block;
float: right;
margin-left: 1em;
}

/** Tests: Pass/Fail */
Expand All @@ -88,24 +104,55 @@
}

#qunit-tests li {
padding: 0.4em 0.5em 0.4em 2.5em;
border-bottom: 1px solid #fff;
padding: 0.4em 1em 0.4em 1em;
border-bottom: 1px solid #FFF;
list-style-position: inside;
}

#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
#qunit-tests > li {
display: none;
}

#qunit-tests li.running,
#qunit-tests li.pass,
#qunit-tests li.fail,
#qunit-tests li.skipped {
display: list-item;
}

#qunit-tests.hidepass {
position: relative;
}

#qunit-tests.hidepass li.running,
#qunit-tests.hidepass li.pass {
visibility: hidden;
position: absolute;
width: 0;
height: 0;
padding: 0;
border: 0;
margin: 0;
}

#qunit-tests li strong {
cursor: pointer;
}

#qunit-tests li.skipped strong {
cursor: default;
}

#qunit-tests li a {
padding: 0.5em;
color: #c2ccd1;
color: #C2CCD1;
text-decoration: none;
}

#qunit-tests li p a {
padding: 0.25em;
color: #6B6464;
}
#qunit-tests li a:hover,
#qunit-tests li a:focus {
color: #000;
Expand All @@ -120,11 +167,13 @@
margin-top: 0.5em;
padding: 0.5em;

background-color: #fff;
background-color: #FFF;

border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}

.qunit-source {
margin: 0.6em 0 0.3em;
}

.qunit-collapsed {
Expand All @@ -133,13 +182,13 @@

#qunit-tests table {
border-collapse: collapse;
margin-top: .2em;
margin-top: 0.2em;
}

#qunit-tests th {
text-align: right;
vertical-align: top;
padding: 0 .5em 0 0;
padding: 0 0.5em 0 0;
}

#qunit-tests td {
Expand All @@ -153,84 +202,96 @@
}

#qunit-tests del {
background-color: #e0f2be;
color: #374e0c;
background-color: #E0F2BE;
color: #374E0C;
text-decoration: none;
}

#qunit-tests ins {
background-color: #ffcaca;
background-color: #FFCACA;
color: #500;
text-decoration: none;
}

/*** Test Counts */

#qunit-tests b.counts { color: black; }
#qunit-tests b.counts { color: #000; }
#qunit-tests b.passed { color: #5E740B; }
#qunit-tests b.failed { color: #710909; }

#qunit-tests li li {
padding: 5px;
background-color: #fff;
background-color: #FFF;
border-bottom: none;
list-style-position: inside;
}

/*** Passing Styles */

#qunit-tests li li.pass {
color: #3c510c;
background-color: #fff;
color: #3C510C;
background-color: #FFF;
border-left: 10px solid #C6E746;
}

#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
#qunit-tests .pass .test-name { color: #366097; }

#qunit-tests .pass .test-actual,
#qunit-tests .pass .test-expected { color: #999999; }
#qunit-tests .pass .test-expected { color: #999; }

#qunit-banner.qunit-pass { background-color: #C6E746; }

/*** Failing Styles */

#qunit-tests li li.fail {
color: #710909;
background-color: #fff;
background-color: #FFF;
border-left: 10px solid #EE5757;
white-space: pre;
}

#qunit-tests > li:last-child {
border-radius: 0 0 5px 5px;
-moz-border-radius: 0 0 5px 5px;
-webkit-border-bottom-right-radius: 5px;
-webkit-border-bottom-left-radius: 5px;
}

#qunit-tests .fail { color: #000000; background-color: #EE5757; }
#qunit-tests .fail { color: #000; background-color: #EE5757; }
#qunit-tests .fail .test-name,
#qunit-tests .fail .module-name { color: #000000; }
#qunit-tests .fail .module-name { color: #000; }

#qunit-tests .fail .test-actual { color: #EE5757; }
#qunit-tests .fail .test-expected { color: green; }
#qunit-tests .fail .test-expected { color: #008000; }

#qunit-banner.qunit-fail { background-color: #EE5757; }

/*** Skipped tests */

#qunit-tests .skipped {
background-color: #EBECE9;
}

#qunit-tests .qunit-skipped-label {
background-color: #F4FF77;
display: inline-block;
font-style: normal;
color: #366097;
line-height: 1.8em;
padding: 0 0.5em;
margin: -0.4em 0.4em -0.4em 0;
}

/** Result */

#qunit-testresult {
padding: 0.5em 0.5em 0.5em 2.5em;
padding: 0.5em 1em 0.5em 1em;

color: #2b81af;
color: #2B81AF;
background-color: #D2E0E6;

border-bottom: 1px solid white;
border-bottom: 1px solid #FFF;
}
#qunit-testresult .module-name {
font-weight: bold;
font-weight: 700;
}

/** Fixture */
Expand All @@ -241,4 +302,4 @@
left: -10000px;
width: 1000px;
height: 1000px;
}
}

0 comments on commit b124240

Please sign in to comment.