Ir para o conteúdo
andrejkl

[Resolvido] Calculo da double

Mensagens Recomendadas

andrejkl

Private Sub Button1_Click_2(sender As Object, e As EventArgs) Handles Button1.Click
       Dim final As Double
       final = CDbl(valor1.Text) + CDbl(valor2.Text) + CDbl(valor3.Text) + CDbl(valor4.Text) + CDbl(valor5.Text) + CDbl(valor6.Text)
       resultado.Text = final.ToString("##,##0.00")
       Me.Extenso.Text = NumberToEuro(Me.resultado.Text)
   End Sub

o programa nao consegue somar isto

final = CDbl(valor1.Text) + CDbl(valor2.Text) + CDbl(valor3.Text) + CDbl(valor4.Text) + CDbl(valor5.Text) + CDbl(valor6.Text)

sera que há outra forma de fazer ?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

O não conseguir somar, neste caso, deve ser um erro, ou um valor parvo.

Tens de te habituar a dar mais detalhe nos teus posts! A malta aqui é boa, mas não é adivinha :)

O "problema" do CDbl é que vai tentar inferir um double com base nas definições regionais do sistema, o que pode gerar problemas como 10,00 + 20,00 = 3000 ou até mesmo estoirar.

A resolução passa por normalizar as introduções das textboxes primeiro.

Dá uma vista de olhos no TryParse da classe Double (Double.TryParse).

Deixo-te uma sugestão que substituí vírgula ou ponto por o separador decimal da cultura actual (não compatível com decimais e separadores de milhar):

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       Dim final As Double
       Dim erro As Boolean = False
       For Each t As TextBox In {valor1, valor2, valor3, valor4, valor5, valor6}
           t.BackColor = Color.White
           Dim er As Boolean = False
           final += DblNormalizado(t.Text, er)
           If er Then
               erro = True
               t.BackColor = Color.Coral
           End If
       Next
       resultado.Text = final.ToString("##,##0.00")
       If erro Then MsgBox("Existe pelo menos um valor em erro")
   End Sub

   Private Function DblNormalizado(valorstr As String, ByRef erro As Boolean) As Double
       erro = False
       Dim valor As Double
       Dim d As String = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator()
       If Double.TryParse(valorstr.Replace(",", d).Replace(".", d), valor) Then
           Return valor
       End If
       erro = True
       Return 0
   End Function


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.