PROBLEMA COM VALOR

POCE1DON 11/02/2014 17:05:54
#434568
Olá pessoal!

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.
SINCLAIR 11/02/2014 17:31:59
#434570
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.
OCELOT 11/02/2014 17:34:43
#434571
Resposta escolhida
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)

POCE1DON 11/02/2014 18:17:19
#434580
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ê!
Tópico encerrado , respostas não são mais permitidas