]> source.dussan.org Git - jquery.git/commitdiff
Core: Work around loss of precision from parseFloat
authorRichard Gibson <richard.gibson@gmail.com>
Sat, 7 Jun 2014 18:22:49 +0000 (14:22 -0400)
committerRichard Gibson <richard.gibson@gmail.com>
Sat, 7 Jun 2014 18:22:49 +0000 (14:22 -0400)
Fixes #15100

src/core.js
test/unit/core.js

index d3501041ede6919ae7a532e621f5a45209359b74..028d0ac02568fac1c15eb3d9eba3e6531ac32309 100644 (file)
@@ -216,7 +216,8 @@ jQuery.extend({
                // parseFloat NaNs numeric-cast false positives (null|true|false|"")
                // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
                // subtraction forces infinities to NaN
-               return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
+               // adding 1 corrects loss of precision from parseFloat (#15100)
+               return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
        },
 
        isEmptyObject: function( obj ) {
index b2a0b880e14ebe08992e58120f2b3431774cc4dc..79cbd0d549a2fe1578c3a67b4edc5488b3221440 100644 (file)
@@ -462,7 +462,7 @@ test("isFunction", function() {
 });
 
 test( "isNumeric", function() {
-       expect( 37 );
+       expect( 38 );
 
        var t = jQuery.isNumeric,
                Traditionalists = /** @constructor */ function(n) {
@@ -490,6 +490,7 @@ test( "isNumeric", function() {
        ok( t("4.536"), "Positive floating point string");
        ok( t(-2.6), "Negative floating point number");
        ok( t(3.1415), "Positive floating point number");
+       ok( t(1.5999999999999999), "Very precise floating point number" );
        ok( t(8e5), "Exponential notation");
        ok( t("123e-2"), "Exponential notation string");
        ok( t(answer), "Custom .toString returning number");