la cuenta es fácil consiste en tomar un numero por ejemplo como este 32.4525 la parte entera es el grado (32) la parte decimal se la multiplica por 60 (0.4525 x 60) eso da como resultado 27,15 la parte entera son los minutos (27), y a la parte decimal se la multiplica por segundos 0.15 x 60 el resultado de eso ( 9) son los segundos (este ultimo puede tener decimales.)
esta es la función que hice pero no funciona bien
Código
Option Explicit Private Sub Form_Load() Dim G As Double, M As Double, S As Double DecimalToGMS 32.4525, G, M, S Debug.Print G, M, S '32.4525 = 32 Grados,27 Minutos,9 Segundos DecimalToGMS 61.0125731667, G, M, S Debug.Print G, M, S '61.0125731667 = 61 Grados,0 Minutos,45.2633999976 Segundos End Sub Private Function DecimalToGMS(Value As Double, Grado As Double, Minuto As Double, Segundo As Double) Dim Absolute As Double Dim sRet As String Dim lPos As Long Dim pEntera As Double, pDecimal As Double Absolute = Abs(Value) pEntera = Fix(Absolute) pDecimal = Absolute - pEntera Grado = pEntera Absolute = pDecimal * 60 pEntera = Fix(Absolute) pDecimal = Absolute - pEntera If pEntera <> Absolute Then Minuto = pEntera End If Segundo = pDecimal * 60 End Function
aqui tienen una pagina para testear los resultados (funciona bien)
http://convertir-grados-decimales-a-grados-minutos-y-segundos.todala.info/
intente utilizar el valor como una cadena de texto pero tengo el problema cuando en la parte de multiplicar los segundos no hay decimales,
si lo tratan como una cadena de texto tengan en cuenta que según la configuración local el punto podría ser una coma.