 VB .NET - Convertendo Graus para minutos e segundos
 
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. |  | 
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:
2 Labels
2 TextBox - txtGraus, txtMinutosSegundos
2 Button - btnConverter, btnSair
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
	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 Facebook
  
 Compartilhe no Twitter
 
Compartilhe no Twitter
  
  
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
VB .NET - DataGridView - Selecionando e exibindo registros - Macoratti
C# - DataGridView - Salvando o conteúdo e realizando ... - Macoratti
C# - Mestre Detalhes com DataGrid e DataGridView - Macoratti