PROBLEMA COM VALOR
Estou com problemas na realização de um cálculo em percentual para valores em [ô]Currency[ô]. A situação é que tenho 5 itens, e cada um com o seu devido valor. Faço a soma do valor desses 5 itens e obtenho um total. Pego o valor de cada item, multiplico por 100 e divido pelo total para obter o percentual que preciso.
O problema é que ao fazer a multiplicação por 100 e a divisão pelo total, o valor está ficando com erro.
Por exemplo:
Um dos itens, esta com o valor de R$ 40,00. O total da soma dos 5 itens resulta em R$ 278.026,41. O resultado do cálculo ((40 x 100) / 278026,41) é 0.0143871, feito em uma calculadora comum, e pra mim só interessa até os 2 dÃgitos após a vÃrgula, ou seja, seria 0,01.
Agora aqui no VB 6.0, está ficando 1,43871224320021E-02. Não sei mais o que fazer, já tentei converter os valores para Currency antes do cálculo, mas sem sucesso. Tentei também como Double e nada. Declarei variáveis desses tipos e atribuà os valores antes e realizei o cálculo com as variáveis, mas não funcionou também.
Alguém poderia me ajudar e dizer o que estou fazendo de errado?
Desde já o meu grande obrigado.
Att.
O VB tem uns problemas relativos a isto mesmo. Há um tópico da MicroSoft que explica porque.
Mas, sendo mais direto, tem como funcionar.
Use Currency que deve resolver. Aqui no meu VB criei um botão de comando no form1 e inseri o código:
Private Sub Command1_Click()
Dim a As Currency
Dim b As Currency
Dim c As Currency
a = 40 * 100
b = 278026.41
c = a / b
MsgBox (c)
End Sub
O resultado aparece corretamente: 0,0144
Se as variáveis forem do tipo Double, dai sim acontece o erro que você mencionou.
Tudo de bom.
O valor 1,43871224320021E-02 é equivalente a 0,0143871224320021
Repare que o E-02 no final significa que a casa decimal deve ser movida duas casas para a esquerda, então como para você o que interessa é só os primeiros dois dÃgitos depois da virgula use a função Round para arredondar o resultado, por exemplo
MsgBox Round((40 * 100) / 278026.41, 2)
Citação::
Amigo,
O VB tem uns problemas relativos a isto mesmo. Há um tópico da MicroSoft que explica porque.
Mas, sendo mais direto, tem como funcionar.
Use Currency que deve resolver. Aqui no meu VB criei um botão de comando no form1 e inseri o código:
Private Sub Command1_Click()
Dim a As Currency
Dim b As Currency
Dim c As Currency
a = 40 * 100
b = 278026.41
c = a / b
MsgBox (c)
End Sub
O resultado aparece corretamente: 0,0144
Se as variáveis forem do tipo Double, dai sim acontece o erro que você mencionou.
Tudo de bom.
Engraçado, quando feito dessa sua forma, o valor aparece correto. O que eu estava fazendo para testes era usando o debug.print, e assim não funciona, é exibido o mesmo valor para que se mova 2 casas antes da vÃrgula, como o OCELOT disse, mas mesmo assim obrigado pelo apoio.
Citação::
O seu valor está correto, só que como o resultado tem muitas casas decimais ele foi mostrado em notação cientifica enquanto que a calculadora que você usou arredondou o valor por exibir no máximo 8 algarismos
O valor 1,43871224320021E-02 é equivalente a 0,0143871224320021
Repare que o E-02 no final significa que a casa decimal deve ser movida duas casas para a esquerda, então como para você o que interessa é só os primeiros dois dÃgitos depois da virgula use a função Round para arredondar o resultado, por exemplo
MsgBox Round((40 * 100) / 278026.41, 2)
Amigo, sua solução/explicação foi perfeita, funcionou como eu gostaria!
Fica aqui o meu muito obrigado a você!