diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerSpatialDatatype.java b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerSpatialDatatype.java index 31f6eb95b..37fd3e6bd 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerSpatialDatatype.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerSpatialDatatype.java @@ -1484,7 +1484,8 @@ void readPointWkt() throws SQLServerException { while (currentWktPos < wkt.length() && (Character.isDigit(wkt.charAt(currentWktPos)) || wkt.charAt(currentWktPos) == '.' - || wkt.charAt(currentWktPos) == 'E' || wkt.charAt(currentWktPos) == 'e')) { + || wkt.charAt(currentWktPos) == 'E' || wkt.charAt(currentWktPos) == 'e' + || wkt.charAt(currentWktPos) == '-')) { currentWktPos++; } diff --git a/src/test/java/com/microsoft/sqlserver/jdbc/datatypes/SQLServerSpatialDatatypeTest.java b/src/test/java/com/microsoft/sqlserver/jdbc/datatypes/SQLServerSpatialDatatypeTest.java index 5448cda25..87aa62843 100644 --- a/src/test/java/com/microsoft/sqlserver/jdbc/datatypes/SQLServerSpatialDatatypeTest.java +++ b/src/test/java/com/microsoft/sqlserver/jdbc/datatypes/SQLServerSpatialDatatypeTest.java @@ -2122,6 +2122,18 @@ public void testLargeCases() throws SQLException { } } + /** + * Tests Geography almost zero coordinates like 0.0001234. The string representation is "1.234E-4", which + * caused a bug when creating a Geography object. + */ + @Test + public void testGeographySmallCoordinates() throws SQLException { + Geography g = Geography.point(0.0001234, 1.234, 4326); + + assertEquals(0.0001234, g.getLatitude()); + assertEquals(1.234, g.getLongitude()); + } + private void beforeEachSetup() throws SQLException { try (Statement stmt = connection.createStatement()) { TestUtils.dropTableIfExists(AbstractSQLGenerator.escapeIdentifier(geomTableName), stmt);