diff options
author | Arne H Juul <arnej@yahoo-inc.com> | 2017-02-09 11:12:19 +0100 |
---|---|---|
committer | Arne H Juul <arnej@yahoo-inc.com> | 2017-02-09 11:13:14 +0100 |
commit | ff12f27c37e3de29ff6dfd207948269573ae0d81 (patch) | |
tree | 0440b6b7cf9c53628b3129dbe5f8924841d4e78b /document | |
parent | 9e7006beeb29e7c042ee0d07990b605ac2b852ad (diff) |
avoid scientific notation in degrees formatting
Diffstat (limited to 'document')
-rw-r--r-- | document/src/main/java/com/yahoo/document/PositionDataType.java | 21 | ||||
-rw-r--r-- | document/src/test/java/com/yahoo/document/PositionTypeTestCase.java | 25 |
2 files changed, 44 insertions, 2 deletions
diff --git a/document/src/main/java/com/yahoo/document/PositionDataType.java b/document/src/main/java/com/yahoo/document/PositionDataType.java index a2a1c6012a1..816fcd7bdf7 100644 --- a/document/src/main/java/com/yahoo/document/PositionDataType.java +++ b/document/src/main/java/com/yahoo/document/PositionDataType.java @@ -7,6 +7,10 @@ import com.yahoo.document.datatypes.Struct; import com.yahoo.geo.DegreesParser; import com.yahoo.document.serialization.XmlStream; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.Locale; + /** * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a> */ @@ -20,6 +24,19 @@ public final class PositionDataType { private static final Field FFIELD_X = INSTANCE.getField(FIELD_X); private static final Field FFIELD_Y = INSTANCE.getField(FIELD_Y); + private static final DecimalFormat degreeFmt; + + static { + degreeFmt = new DecimalFormat("0.0#####", DecimalFormatSymbols.getInstance(Locale.ENGLISH)); + degreeFmt.setMinimumIntegerDigits(1); + degreeFmt.setMinimumFractionDigits(1); + degreeFmt.setMaximumFractionDigits(6); + } + + static String fmtD(double degrees) { + return degreeFmt.format(degrees); + } + private PositionDataType() { // unreachable } @@ -29,10 +46,10 @@ public final class PositionDataType { double ns = getYValue(pos).getInteger() / 1.0e6; double ew = getXValue(pos).getInteger() / 1.0e6; buf.append(ns < 0 ? "S" : "N"); - buf.append(ns < 0 ? (-ns) : ns); + buf.append(fmtD(ns < 0 ? (-ns) : ns)); buf.append(";"); buf.append(ew < 0 ? "W" : "E"); - buf.append(ew < 0 ? (-ew) : ew); + buf.append(fmtD(ew < 0 ? (-ew) : ew)); return buf.toString(); } diff --git a/document/src/test/java/com/yahoo/document/PositionTypeTestCase.java b/document/src/test/java/com/yahoo/document/PositionTypeTestCase.java index 3fb9c8d3f9e..1e05c46f898 100644 --- a/document/src/test/java/com/yahoo/document/PositionTypeTestCase.java +++ b/document/src/test/java/com/yahoo/document/PositionTypeTestCase.java @@ -41,4 +41,29 @@ public class PositionTypeTestCase { assertEquals("foo.position", PositionDataType.getPositionSummaryFieldName("foo")); assertEquals("foo.distance", PositionDataType.getDistanceSummaryFieldName("foo")); } + + @Test + public void requireFixedPointFormat() { + assertEquals("0.0", PositionDataType.fmtD(0)); + assertEquals("123.0", PositionDataType.fmtD(123)); + assertEquals("0.000123", PositionDataType.fmtD(0.000123)); + assertEquals("0.000001", PositionDataType.fmtD(0.000001)); + assertEquals("0.0", PositionDataType.fmtD(0.0000004)); + assertEquals("999.123456", PositionDataType.fmtD(999.1234564)); + + Struct val1 = PositionDataType.valueOf(0, 0); + assertEquals("N0.0;E0.0", PositionDataType.renderAsString(val1)); + + Struct val2 = PositionDataType.valueOf(-1, -1); + assertEquals("S0.000001;W0.000001", PositionDataType.renderAsString(val2)); + + Struct val3 = PositionDataType.valueOf(123456789, 87654321); + assertEquals("N87.654321;E123.456789", PositionDataType.renderAsString(val3)); + + Struct val4 = PositionDataType.valueOf(Integer.MIN_VALUE, Integer.MIN_VALUE); + assertEquals("S2147.483648;W2147.483648", PositionDataType.renderAsString(val4)); + + Struct val5 = PositionDataType.valueOf(Integer.MAX_VALUE, Integer.MAX_VALUE); + assertEquals("N2147.483647;E2147.483647", PositionDataType.renderAsString(val5)); + } } |