перевод я уже делал 3 емя способами
1) Писал используя стандартные типы
int d1 = (int) lat ;
double r11 = (lat - d1) * 60;
int m1 = (int) r11;
double s1 = ((r11 - m1) * 60)*1000;
String lats = Integer.toString(d1)+Integer.toString(m1) + "." + Integer.toString((int)Math.round(s1));
//double result = lat1* 100+lat2;
int d2 = (int) lon ;
double r21 = (lon - d2) * 60;
int m2 = (int) r21;
double s2 = ((r21 - m2) * 60)*1000;
String do2 = Integer.toString(d2);
if (d2 < 100) {do2 = "0"+Integer.toString(d2);}
String lons = do2+Integer.toString(m2) + "." + Integer.toString((int)Math.round(s2));
2) Используя BigDecimal
BigDecimal blat = new BigDecimal(lat);
BigDecimal degrees = blat.setScale(0, BigDecimal.ROUND_FLOOR);
BigDecimal minutes = blat.subtract(degrees).multiply(new BigDecimal(60)).setScale(0,BigDecimal.ROUND_FLOOR);
BigDecimal second = blat.subtract(degrees).multiply(new BigDecimal(3600)).subtract(minutes.multiply(new BigDecimal(60))).setScale(4,BigDecimal.ROUND_HALF_DOWN);
String str_second = Integer.toString(second.multiply(new BigDecimal(1000)).intValue());
//if (second.intValue() < 10) {str_second = "0"+str_second;}
String lats = Integer.toString(degrees.intValue()) + Integer.toString(minutes.intValue()) +"." + str_second;
BigDecimal blon = new BigDecimal(lon);
BigDecimal degrees1 = blon.setScale(0, BigDecimal.ROUND_FLOOR);
BigDecimal minutes1 = blon.subtract(degrees1).multiply(new BigDecimal(60)).setScale(0,BigDecimal.ROUND_FLOOR);
BigDecimal second1 = blon.subtract(degrees1).multiply(new BigDecimal(3600)).subtract(minutes1.multiply(new BigDecimal(60))).setScale(4,BigDecimal.ROUND_HALF_DOWN);
String str_degrees1 = Integer.toString(degrees1.intValue());
if (degrees1.intValue() < 100) {str_degrees1 = "0"+str_degrees1;}
String str_second1 = Integer.toString(second1.multiply(new BigDecimal(1000)).intValue());
3) Используя штатные средства Андроида
lat = Math.abs(lat);
lon = Math.abs(lon);
String latinsec = Location.convert(lat, Location.FORMAT_SECONDS);
String[] latarray = latinsec.split(":");
String lats = latarray[0]+latarray[1]+"."+latarray[2].replace(".", "");
String loninsec = Location.convert(lon, Location.FORMAT_SECONDS);
String[] lonarray = loninsec.split(":");
String lons = lonarray[0]+lonarray[1]+"."+lonarray[2].replace(".", "");
if ((int)lon < 100) {lons = "0"+lons;}
Результат одинаковый
передаю
32,11482531
49,40649735
тк тип используетсь double
то координаты приходят как
32.114825
49.40649666666666
Дальше при переводе
32:6:53.37
49:24:23.388
Конечно можно сказать, что double с погрешностью и все из-за этого, но если эту погрешность не переводить в гр.мин.сек, то ей можно пренебречь, что подтверждает скриншот с Андроида, которому я отдал непереведенные координаты с погрешностью, которые дает тип double.
С уважением, команда Overseer.
Киев, Черкассы, Винница.
http://overseer.ua