@@ -1723,7 +1723,7 @@ void testStringCreateNumberEnsureNoPrecisionLoss() {
17231723 assertInstanceOf (BigDecimal .class , NumberUtils .createNumber ("0001.797693134862315759e+308" ));
17241724 assertInstanceOf (BigDecimal .class , NumberUtils .createNumber ("-001.797693134862315759e+308" ));
17251725 assertInstanceOf (BigDecimal .class , NumberUtils .createNumber ("+001.797693134862315759e+308" ));
1726- //LANG-1613
1726+ // LANG-1613
17271727 assertInstanceOf (Double .class , NumberUtils .createNumber ("2.2250738585072014E-308" ));
17281728 assertInstanceOf (Double .class , NumberUtils .createNumber ("2.2250738585072014E-308D" ));
17291729 assertInstanceOf (Double .class , NumberUtils .createNumber ("2.2250738585072014E-308F" ));
@@ -1735,6 +1735,33 @@ void testStringCreateNumberEnsureNoPrecisionLoss() {
17351735 assertInstanceOf (Double .class , NumberUtils .createNumber ("1.7976931348623157E308F" ));
17361736 assertInstanceOf (Double .class , NumberUtils .createNumber ("4.9e-324D" ));
17371737 assertInstanceOf (Double .class , NumberUtils .createNumber ("4.9e-324F" ));
1738+ // LANG-1444
1739+ assertInstanceOf (Float .class , NumberUtils .createNumber ("1.1" ));
1740+ assertInstanceOf (Float .class , NumberUtils .createNumber ("1.01" ));
1741+ assertInstanceOf (Float .class , NumberUtils .createNumber ("1.001" ));
1742+ assertInstanceOf (Float .class , NumberUtils .createNumber ("1.0001" ));
1743+ assertInstanceOf (Float .class , NumberUtils .createNumber ("1.00001" ));
1744+ assertInstanceOf (Float .class , NumberUtils .createNumber ("1.000001" ));
1745+ assertInstanceOf (Float .class , NumberUtils .createNumber ("1.0000001" ));
1746+ assertInstanceOf (Double .class , NumberUtils .createNumber ("1.00000001" ));
1747+ assertInstanceOf (Double .class , NumberUtils .createNumber ("1.000000001" ));
1748+ assertInstanceOf (Double .class , NumberUtils .createNumber ("1.0000000001" ));
1749+ assertInstanceOf (Double .class , NumberUtils .createNumber ("1.00000000001" ));
1750+ assertInstanceOf (Double .class , NumberUtils .createNumber ("1.000000000001" ));
1751+ assertInstanceOf (Double .class , NumberUtils .createNumber ("1.0000000000001" ));
1752+ assertInstanceOf (Double .class , NumberUtils .createNumber ("1.00000000000001" ));
1753+ assertInstanceOf (Double .class , NumberUtils .createNumber ("1.000000000000001" ));
1754+ // Now we get Floats: This happens because Double.valueOf("1.000000000000001") = 1.000000000000001 and Double.valueOf("1.0000000000000001") = 1.0. In
1755+ // the latter case because we've lost the precision, it no longer matters whether we store the number as a Double or a Float, so we use a Float because
1756+ // it's been truncated.
1757+ assertInstanceOf (Float .class , NumberUtils .createNumber ("1.0000000000000001" ));
1758+ assertInstanceOf (Float .class , NumberUtils .createNumber ("1.00000000000000001" ));
1759+ assertInstanceOf (Float .class , NumberUtils .createNumber ("1.000000000000000001" ));
1760+ assertInstanceOf (Float .class , NumberUtils .createNumber ("1.0000000000000000001" ));
1761+ assertInstanceOf (Float .class , NumberUtils .createNumber ("1.00000000000000000001" ));
1762+ assertInstanceOf (Float .class , NumberUtils .createNumber ("1.000000000000000000001" ));
1763+ assertInstanceOf (Float .class , NumberUtils .createNumber ("1.0000000000000000000001" ));
1764+ assertInstanceOf (Float .class , NumberUtils .createNumber ("1.00000000000000000000001" ));
17381765 }
17391766
17401767 /**
0 commit comments