PORCENTAGEM

 Tópico anterior Próximo tópico Novo tópico

PORCENTAGEM

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#492875 - 05/03/2020 03:12:34

AMORIM
PALMAS/TOCANTINS
Cadast. em:Agosto/2015


Última edição em 05/03/2020 03:13:58 por AMORIM

Pessoal mais uma vez estou aqui tentando fazer uma porcentagem porem o valor esta arredondando e e o problema
exemplo 2.205,48/3.772,04 = 58,46 só que esta redondeado pra 58 e tem que ser 58,46 alguém uma ideia de como fazer eu estou errando aonde?

For Each i As DataGridViewRow In dgvVendas.Rows
txtPorcento.text=i.Cells(3).Value = Format(Val(i.Cells(2).Value) / Val(TotalVendas), "##,##0.00") * 100
        Next



#492876 - 05/03/2020 05:55:46

JONATHANSTECKER
METZ
Cadast. em:Junho/2009


For Each i As DataGridViewRow In dgvVendas.Rows
    txtPorcento.text = i.Cells(3).Value = Math.Round(Val(i.Cells(2).Value) / Val(TotalVendas) * 100, 2)
Next




#492877 - 05/03/2020 07:24:19

AMORIM
PALMAS/TOCANTINS
Cadast. em:Agosto/2015


Eu ja fiz assim mais não funcionou



#492878 - 05/03/2020 09:16:27

NILSONTRES
SAO PAULO
Cadast. em:Março/2012


Última edição em 05/03/2020 09:17:09 por NILSONTRES

        Dim vl1 As Decimal = "2.205,48"
        Dim vl2 As Decimal = "3.772,04"
        MsgBox(FormatNumber(vl1 / vl2 * 100, 4)) '=58,4692
        MsgBox(FormatNumber(vl1 / vl2 * 100, 2)) '=58,47
Se vc formatar vai arredondar, até 4650 para 46, acima de 4650 para 47




#492879 - 05/03/2020 09:39:46

AMORIM
PALMAS/TOCANTINS
Cadast. em:Agosto/2015


Eu já tentei assim também, porem na hora de exibir o resultado no Datagridview da erro, se você exibir no MsgBox funciona perfeitamente



#492880 - 05/03/2020 10:03:40

AMORIM
PALMAS/TOCANTINS
Cadast. em:Agosto/2015


Última edição em 05/03/2020 13:27:42 por AMORIM

Segue função se alguem quiser da uma olhada e ver aonde esta o erro.
Dim Valor1, Valor2, TotalVendas As Decimal
    Private Sub ListaVendaDatas()
        Using con As OleDbConnection = GetConnection()
            Try
                con.Open()
                Dim sql As String = ""
                If VerificaPDV = 0 Then
                    sql = "SELECT NOMELOJA,TIPO,Sum(VALOR),COUNT(TIPO) FROM CAIXAEMPRESA WHERE DateValue(DATA) >= DateValue('" & dtpInicio.Text & "') AND DateValue(DATA) <= DateValue('" & dtpFim.Text & "') AND NOMELOJA='" & CobLoja.Text & "' AND TIPO <> 'TROCO' AND TIPO <> 'DESCONTO' GROUP BY NOMELOJA,TIPO"
                ElseIf VerificaPDV = 1 Then
                    sql = "SELECT NOMELOJA,TIPO,Sum(VALOR),COUNT(TIPO) FROM CAIXAEMPRESA WHERE DateValue(DATA) >= DateValue('" & dtpInicio.Text & "') AND DateValue(DATA) <= DateValue('" & dtpFim.Text & "') AND NOMELOJA='" & CobLoja.Text & "' AND NUMEROPDV=" & CobPdv.Text & " AND TIPO <> 'TROCO' AND TIPO <> 'DESCONTO' GROUP BY NOMELOJA,TIPO"
                End If
                Dim cmd As OleDbCommand = New OleDbCommand(sql, con)
                Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmd)
                Dim dt As New DataTable
                da.Fill(dt)
                dgvVendas.DataSource = dt
                PCalculaTotalReceita()
                For Each i As DataGridViewRow In dgvVendas.Rows
               i.Cells(3).Value = Math.Round(i.Cells(2).Value / TotalVendas * 100, 2)
                Next
                TotalVendas = Nothing
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                con.Close()
            End Try
        End Using
    End Sub
    Private Sub PCalculaTotalReceita()
        On Error Resume Next
        For Each linha As DataGridViewRow In dgvVendas.Rows
            TotalVendas = TotalVendas + linha.Cells(2).Value
        Next
        Total.Text = Format(TotalVendas, "##,##0.00")
    End Sub




Resposta escolhida #492883 - 05/03/2020 12:45:03

JABA
CABO FRIO
Cadast. em:Agosto/2005


Última edição em 05/03/2020 12:51:40 por JABA

O problema está ocorrendo por causa da função Val(). Tente um Cdbl() ou sem nada, que certamente vai dar certo.

For Each i As DataGridViewRow In dgvVendas.Rows
     txtPorcento.text=i.Cells(3).Value = Format(CDbl(i.Cells(2).Value) / CDbl(TotalVendas), "##,##0.00") * 100
Next


ou

For Each i As DataGridViewRow In dgvVendas.Rows
    txtPorcento.text = i.Cells(3).Value = Math.Round(i.Cells(2).Value / TotalVendas * 100, 2)
Next


_______________________________________________________________________________________________

Se a alma ou espírito são imateriais, como eles fazem para se localizar quando o corpo está em movimento?



#492884 - 05/03/2020 13:17:23

AMORIM
PALMAS/TOCANTINS
Cadast. em:Agosto/2015


O resultado no textbox funciona perfeitamente, o problema e a terceira coluna do DataGridViewRow que tem que receber o valor sem arredondar

exemplo: 2.205,48/3.772,04 * 100 aparece normalmente que e 58,46 (certo) no textbox só que no DataGridViewRow aparece 58,00 redondo (errado)

For Each i As DataGridViewRow In dgvVendas.Rows
                    i.Cells(3).Value = Math.Round(i.Cells(2).Value / TotalVendas * 100, 2) o valor tem que aparecer aqui sem arrendondar
                Next



#492887 - 05/03/2020 13:48:23

JABA
CABO FRIO
Cadast. em:Agosto/2005


Última edição em 05/03/2020 13:56:08 por JABA

For Each i As DataGridViewRow In dgvVendas.Rows
       dim valor as decimal = i.Cells(2).Value 'se der erro é porque o valor não está vindo no formato decimal, precisaria de uma conversão.
      dim total as decimal = TotalVendas 'se der erro é porque o valor não está vindo no formato decimal, precisaria de uma conversão.
       i.Cells(3).Value = valor / total * 100
Next


ou

For Each i As DataGridViewRow In dgvVendas.Rows
       dim valor as decimal = Math.Round(i.Cells(2).Value, 2)
      dim total as decimal = TotalVendas
       i.Cells(3).Value = valor / total * 100
Next





_______________________________________________________________________________________________

Se a alma ou espírito são imateriais, como eles fazem para se localizar quando o corpo está em movimento?



#492888 - 05/03/2020 13:59:43

AMORIM
PALMAS/TOCANTINS
Cadast. em:Agosto/2015


Os valores estão passando eu testei no textbox funciona perfeitamente, somente na coluna do DataGridViewRow  que não funciona.






#492889 - 05/03/2020 14:02:51

JABA
CABO FRIO
Cadast. em:Agosto/2005


Última edição em 05/03/2020 14:05:38 por JABA

Citação:
:
Os valores estão passando eu testei no textbox funciona perfeitamente, somente na coluna do DataGridViewRow  que não funciona.




Está dando diferente porque você está fazendo cálculo diretamente com o valor que está dentro da célula e ele não está no formato decimal. Converta o valores para decimal antes de fazer os cálculos. Assim:

For Each i As DataGridViewRow In dgvVendas.Rows
       dim valor as decimal = Math.Round(i.Cells(2).Value, 2)
      dim total as decimal = TotalVendas
       i.Cells(3).Value = valor / total * 100
Next


ou

For Each i As DataGridViewRow In dgvVendas.Rows
       dim valor as decimal = Convert.ToDecimal(i.Cells(2).Value)
      dim total as decimal = TotalVendas
       i.Cells(3).Value = valor / total * 100
Next




_______________________________________________________________________________________________

Se a alma ou espírito são imateriais, como eles fazem para se localizar quando o corpo está em movimento?



 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por AMORIM em 05/03/2020 23:03:11