package com.github.pfichtner.jrunalyser.base.util.format; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.Locale; public class LatitudeFormatter { private final String n; private final String s; private final DecimalFormat wholeFormatter; private final DecimalFormat fractionFormatter; public LatitudeFormatter() { this(Locale.getDefault()); } public LatitudeFormatter(Locale locale) { this(new DecimalFormatSymbols(locale)); } public LatitudeFormatter(DecimalFormatSymbols decimalFormatSymbols) { this(decimalFormatSymbols, "N", "S"); } public LatitudeFormatter(String n, String s) { this(Locale.US, n, s); } public LatitudeFormatter(Locale locale, String n, String s) { this(new DecimalFormatSymbols(locale), n, s); } public LatitudeFormatter(DecimalFormatSymbols decimalFormatSymbols, String n, String s) { this.n = n; this.s = s; this.wholeFormatter = new DecimalFormat("00.###", decimalFormatSymbols); this.fractionFormatter = new DecimalFormat("##.###", decimalFormatSymbols); } public String format(double lat) { int whole = (int) lat; double remainder = lat - whole; return (whole > 0 ? this.n : this.s) + this.wholeFormatter.format(Math.abs(whole)) + "° " + this.fractionFormatter.format(Math.abs(remainder * 60)); } }