VB .NET - Convertendo Graus para minutos e segundos


 Neste artigo vou uma maneira bem simples de converter graus para minutos e segundos usando a linguagem VB .NET.

Vamos fazer uma pequena revisão de matemática para quem 'fugiu' da escola:

Os ângulos são medidos em graus (1º) - e as subunidades dos graus são os minutos (1º = 60') e os segundos (1' = 60").

Fazendo a conversão

Suponha que você tenha que dividir um ângulo de 90° por 4

x = 90 / 4 => 22,5°

O ideal, no entanto, é que você apresente o resultado sem "vírgulas", mas transformando a parte decimal (0,5) em minutos e segundos. Assim :

22,5° = 22° + 0,5°

Para transformar 0,5° em minutos vamos usar a regra de três simples:

1°     -----> 60'
0,5°  -----> x


Calculando temos que
x= 30'

Convertendo minutos e segundos

Em alguns casos, você terá uma medida com minutos e segundos:

y = 30,12º = 30º + 0,12º


Transformando
0,12º aplicando a regra de très teremos: y= 60' x 0,12º = 7,2' => 7' + 0,2'

Você tem, então, minutos e "frações" de minutos.

1' -----> 60''
0,2' -----> x


x= 60 x 0,2 = 12''

Reagrupando temos que
30,12° é igual 30° 7' 12''.

Vamos ver como podemos implementar essa lógica usando código VB .NET de uma maneira bem simples.

Recursos Usados

Criando o projeto Windows Forms

Abra o VS 2015 Community e crie um novo projeto (File-> New Project) usando a linguagem VB .NET e o template Windows Forms Application.

Informe um nome a seu gosto. Eu vou usar o nome Vbnet_Graus_MinutosSegundos;

Selecione o formulário Form1.vb e partir da ToolBox inclua os seguintes controles:

Disponha os controles conforme o leiaute da figura abaixo:

Criando o método para converter Graus para Minutos e Segundos

No formulário (ou em uma classe) crie o método ConverterGrausParaMinutosSegundos() com o código abaixo:

 Function ConverterGrausParaMinutosSegundos(ByVal grausDecimais As Decimal) As String
        Try
            Dim decimalGrauAbs As Decimal = Math.Abs(grausDecimais)
            Dim valorRetornado As String = "'"
            Dim grauSimbolo As String = "°"
            Dim minutoSimbolo As String = "’"
            Dim segundoSimbolo As String = """"
            Dim Graus As String = Math.Truncate(decimalGrauAbs) & grauSimbolo
            Dim minutosDecimal As Decimal = (decimalGrauAbs - Math.Truncate(decimalGrauAbs)) * 60
            Dim segundosDecimal As Decimal = (minutosDecimal - Math.Truncate(minutosDecimal))
            Dim Minutos As String = Math.Truncate(minutosDecimal) & minutoSimbolo
            Dim Segundos As String = String.Format("{0:##.0000}", (segundosDecimal * 60)) & segundoSimbolo
            valorRetornado = Graus & " " & Minutos & " " & Segundos
            Return valorRetornado
        Catch ex As Exception
            Throw ex
        End Try
End Function

Este código usa o método Math.Abs que retorna um valor absoluto do número e o método Math.Truncate que calcula a parte integral de um número decimal especificado.

Código do evento TextChanged e do botão para converter

Abaixo temos o código dos eventos TextChanged e KeyPress do controle TextBox - txtGraus - e, do botão de comando - Converter:

  Private Sub txtGraus_TextChanged(sender As Object, e As EventArgs) Handles txtGraus.TextChanged
        If (txtGraus.Text Is Nothing Or txtGraus.Text.Trim().Length < 1) Then
            btnConverter.Enabled = False
        Else
            btnConverter.Enabled = True
        End If
    End Sub
    Private Sub txtGraus_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtGraus.KeyPress
        e.Handled = Not (Char.IsDigit(e.KeyChar) Or e.KeyChar = ",")
    End Sub
    Private Sub btnConverter_Click(sender As Object, e As EventArgs) Handles btnConverter.Click
        Dim valor As Decimal
        If (String.IsNullOrWhiteSpace(txtGraus.Text)) Then
            MessageBox.Show("Informe um valor em graus...")
        Else
            valor = Convert.ToDecimal(txtGraus.Text)
        End If
        Try
            txtMinutosSegundos.Text = ConverterGrausParaMinutosSegundos(valor)
        Catch ex As Exception
            MessageBox.Show("Erro : " + ex.Message)
        End Try
 End Sub
 

Este código habilita o botão para conversão apenas se algum valor for digitado na caixa de texto txtGraus e permite que seja digitado somente valores númericos e a vírgula (,) no TextBox.

A conversão é feita passando o valor digitado, que é convertido antes para decimal, para a função ConverterGrausParaMinutosSegundos sendo o resultado exibido no segundo TextBox - txtMinutosSegundos.

Executando o projeto e iremos obter o seguinte resultado:

Pegue o projeto completo aqui :  Vbnet_Graus_MinutosSegundos.zip

Todas as coisas são puras para os puros, mas nada é puro para os contaminados e infiéis; antes o seu entendimento e consciência estão contaminados.
Confessam que conhecem a Deus, mas negam-no com as obras, sendo abomináveis, e desobedientes, e reprovados para toda a boa obra.

Tito 1:15,16

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti