Как отформатировать мои значения координат для секунд как двойной? - PullRequest
0 голосов
/ 11 июля 2019

Мне нужно преобразовать список координат из десятичных градусов в DMS ... это работает довольно хорошо, но значение секунд по-прежнему целое число, мне нужно его как двойное значение для более высокой точности. Мой код пока что

Function Convert_Degree(Decimal_Deg) As Variant
    With Application
        'Set degree to Integer of Argument Passed
        Degrees = Int(Decimal_Deg)
        'Set minutes to 60 times the number to the right
        'of the decimal for the variable Decimal_Deg
        Minutes = (Decimal_Deg - Degrees) * 60
        'Set seconds to 60 times the number to the right of the
        'decimal for the variable Minute
        Seconds = Format(((Minutes - Int(Minutes)) * 60), "0")
        'Returns the Result of degree conversion
       '(for example, 10.46 = 10~ 27  ' 36")
        Convert_Degree = " " & Degrees & " deg " & Int(Minutes) & "' " _
            & Seconds + Chr(34)
    End With
End Function

Формат - это именно то, что мне нужно, но значение секунд должно быть двойным ... Я не могу заставить это работать, например, при установке Dim Seconds As Double. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Я рекомендую использовать Option Explicit, правильно объявлять переменные и форматировать в самом конце. Обратите внимание, что каждая не объявленная переменная автоматически имеет тип Variant, но Variant является худшим типом, который вы можете выбрать. Если вы можете, всегда старайтесь указать тип, который лучше соответствует вашим потребностям.

Также блок With Application совершенно бесполезен и может быть удален.

Option Explicit

Function Convert_Degree(Decimal_Deg As Double) As String
    Dim Degrees As Long
    Degrees = Int(Decimal_Deg)

    Dim Minutes As Double
    Minutes = (Decimal_Deg - Degrees) * 60

    Dim Seconds As Double
    Seconds = (Minutes - Int(Minutes)) * 60

    Convert_Degree = " " & Degrees & " deg " & Int(Minutes) & "' " & Seconds & Chr(34)
    'or use the one below to format it 
    'Convert_Degree = " " & Degrees & " deg " & Int(Minutes) & "' " & Format$(Seconds, "0.00000") & Chr(34)
End Function
1 голос
/ 11 июля 2019

Вы можете изменить "0" в функции Форматирования секунд на "0.00000", чтобы получить результаты с 5 десятичными разрядами.Поскольку в функции переменных отсутствует объявление, Excel сделает все остальное.

Seconds = Format(((Minutes - Int(Minutes)) * 60), "0.00000") 

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...