Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rafael Grossi

Operações com decimais

Recommended Posts

Aew,eu estou usando no meu programa um exemplo q eu peguei na net, mas ele tem um, digamos, problema. Ele converte os valores para decimais com vírgula.Ok, eu mando o programa, a cada tanto tempo, guardar o valor que está aparecendo em determinado label, soh q como o exemplo está mostrando os valores com vírgula, se o valor for 1,2345 o registro vai ficar apenas 1, ai eu preciso somar esse valor (1,2345) com outros também decimais... entao, qdo eu faço, por exemplo, (1,3) + (1,9) = 2 = (1+1). Eu não achei nada onde eu possa mudar isso, tem uns lugares q tah assim: Trim(Format(m_objIpHelper.BytesReceived, "###,###,###,###")) eu tentei tirar as vírgulas e colocar "." mas nao deu certo.... eu fiz isso em todos os lugares q tinha essa marcação e nada....bom... a minha dúvida?como eu faço para transformar isso em decimal com ponto (se vcs quiserem eu passo o exemplo para vcs),OU, como eu faço operações matemáticas qdo o número tah com vírgulas??vlw!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o VB é em inglês, ele pega como separador decimal o ponto e como separador de centenas a vírgula e eu acho que não há como mudar esse configuração. O que você pode fazer é adaptar o código:

 

valor1 = "1,3"valor2 = "1,7"novo_valor1 = cdouble(replace(valor1,",","."))novo_valor2 = cdouble(replace(valor2,",","."))soma = novo_valor1 + novo_valor2

E na hora de salvar no banco de dados, você utiliza esse mesmo modo (caso seja SQL o cdouble não é necessário) e salva com o ponto.

 

 

[/code]

Compartilhar este post


Link para o post
Compartilhar em outros sites

aew

 

putz... tentei colocar isso ai mas parece q nao deu certo... eu tentei tirar as formatações q aparecem com ### mas tb nao consegui resultados...

o exemplo q eu to usando eh esse aqui:

http://www.planetsourcecode.com/vb/scripts...93&lngWId=1

é um medidor de tráfego para internet...

ele tah marcando em bytes... eu teria q usar em megabytes, então no programa eu mando converter o valor (em bytes)... eu simplesmente coloco para aparecer no lblrecv.caption, todo o código entre parenteses e dividido por 1048576 (que é 1024 ao quadrado.... divido por 1024 para achar em kilobyte, e depois por 1024 de novo para achar em MB)...

ficou aqui:

 

lblRecv.Caption = Trim((Format(m_objIpHelper.BytesReceived, "###,###,###,###")) - lblRecv.Tag) / 1048576

 

essa linha você pode achar ai no exemplo...

entao... o que eu poderia fazerr???

 

vlw!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o valor vem em bytes e você quer mostra em megabytes faz assim:

 

lblRecv.Caption = replace(replace((objIpHelper.BytesReceived - val(lblRecv.Tag)) * 1048576,",",""),".",",")

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, uma correção: o certo é m_objIpHelper mas enfim.... aconteceu 2 problemas:1º: não sei por qual motivo, com esse código, o label inicia com um valor gigante.... tem uns 20 digitos.. nao sei o q eh...2º: tipo... a cada 1048576 bytes eu tenho um MB... logo, para transformar bytes para MB, eu teria q dividir por 1048576 neh??mas mesmo assim, eu mandei dividir, e continuou com o primeiro problema...tah estranho esse programa...o q pode ser??vlw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah eu confundi xD

É divisão mesmo:

lblRecv.Caption = replace(replace((objIpHelper.BytesReceived - val(lblRecv.Tag)) / 1048576,",",""),".",",")

Deve estar grande pois está com muitas casa decimais tenta fazer assim, usando o formatnumber, aproveitando que ele usa as configurações do pc para formatar o número e já sairá com vírgula como separador decimal:

lblRecv.Caption = FormatNumber(((objIpHelper.BytesReceived - val(lblRecv.Tag)) / 1048576, 2, , , vbTrue)

Compartilhar este post


Link para o post
Compartilhar em outros sites

aewentão... o problema é q eu tenho q fazer o programa ai NÃO mostrar a vírgula... eu quero ponto no lugar da vírgula, em todos os valores q ele mostra... pq senão vai complicar aqui as operações que eu tenho q fazer...eu mando somar, ele soma errado (com virgula).... dividir tb.... entao eu tenho q deixar ponto....detalhe: a calculadora do win mostra com vírgula... se eu fizer um calculo simples no vb, tipo:Label1.caption = val(text1) / val(text2)o valor do resultado tb vai aparecer com vírgulas... será q o problema não eh uma config específica do meu windows?? tem como mudar? ou tem como mudar soh nesse caso ai no VB??vlw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apesar de eu nunca ter testado isso, sempre achei que essas configurações monetárias e de data o VB pega do Windows (no Windows XP, você pode configurar isso no painel de Controle em Opções Regionais e de Idioma).

 

Mas mudando isso vai alterar todo o sistema, o que você pode fazer é utilizar o replace mesmo:

 

Label1.caption = replace(val(text1) / val(text2),",",".")

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.