Ir para conteúdo

Arquivado

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

Clauido José

[Resolvido] Formatar String

Recommended Posts

Ola galera é seguinte preciso formatar um valor que vem dua string por exemplo:

 

dim valor as sting

valor = "01259" 'o resultado na tela tem que aparecer "0125,9" e nao to conseguindo de jeito nenhum

alguem pode me ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola galera é seguinte preciso formatar um valor que vem dua string por exemplo:

 

dim valor as sting

valor = "01259" 'o resultado na tela tem que aparecer "0125,9" e nao to conseguindo de jeito nenhum

alguem pode me ajudar

 

Clauido, pelo que entendi você quer que seja colocada uma única casa decimal após entre o penultimo e o ultimo campo da sua String.

 

O código abaixo pode lhe ajudar, coloquei Parte_1 e Parte_2 para ficar mais fácil de entender, mude as variáveis e implemente.

 

Dim valor As String
Dim Parte_1 as String
Dim Parte_2 as String


valor = "01259" 'o resultado na tela tem que aparecer "0125,9" e nao to conseguindo de jeito nenhum
Parte_1 = Left(valor, Len(valor) - 1)
Parte_2 = Right(valor, 1)
valor = Parte_1 & "," & Parte_2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou outra sugestão pode ser:

 

dim sValor as string
dim dValor as double

sValor = "01259"
dValor = CLng(sValor)/10
sValor = CStr(dValor)

Mas na minha sugestão você perderá o 0, então é melhor ficar com a de cima mesmo, rs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse seria o problemao o zero tem que aparecer nao sei pra que mas o cliente pediu a gente tem que fazer o duro vai ser gravar no banco é seguinte este sistema é um sistema de comunicação de balança mais ou menos assim.

 

PC --> ENVIA --> COMUNICADOR --> RECEBE --> BALANÇA

BALANÇA --> ENVIA --> COMUNICADOR --> RECEBE --> PC

 

Estou usando o winsock para comunicar,bom o que ele faz ele transmite pra o comunicador o peso da receita para que o operador coloque na balança o peso real do ingrediente da recite por sua vez a balança envia para controlador para que sistema registre o peso real que foi colocado na balança.

 

Até hoje este sistema trabalhava com balanças de peso de até 100000 kg e sempre tanto o sistema como a balnaça recebiam numero inteiros, mas agora este sistema vai ter que trabalhar com balanças de peso menores tipo 1000kg e agora a coisa muda tanto o sistema quanto a balança vao enviar para controlador numeros com casas decimais cada balança e de um tipo modelo deferente suportam valores com 0,1,2,3,4,5 casas decimais enao o sistema junto com o controlador vai enviar o peso que cada balança vai ser pesada.O tamanho do campo sempre é 5 caractres.

 

Mas por exemplo se uma determinada receita tem um ingrediente que tem um peso menor por exemplo 800kg ele vai ter que enviar pro controlador 00800 a questao da virgula vai de acordo com que ocontrolador mandar pro sistema vou mostrar um exemplo de como deve ficar a formatação na tela.

 

decimal resultado

0 01259

1 012,59

2 01,259

3 01,259

4 0,1259

5 0,1259

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro de tudo.

Quando você disse 1000kg, não seria 1000g? Ou é isso mesmo, mil quilos? É coisa pra caramba se for isso heim... Mas não vem ao caso, hehe.

 

Acho que a melhor opção para você é a passada pelo GustavoRezende mesmo.

 

Só confirma se isso está certo mesmo:

0 01259 (decimal zero, zero casas, correto)

1 012,59 (decimal um com duas casas decimais?)

2 01,259 (decimal dois com tres casa decimais?)

3 01,259 (decimal tres com tres casas, correto)

4 0,1259 (decimal quatro com quatro casas, correto)

5 0,1259 (decimal cinco com quatro casas decimais?)

Se estiver correto, não tem muita lógica para chegar a um resultado coerente, mas se não estiver correto, tente usar esse código abaixo:

Dim idecimal As Integer
Dim resultado As String

idecimal = CInt(decimal_vindo_do_winsock)
resultado = CInt(resultado_vindo_do_winsock)

If idecimal > 0 Then
    resultado = Left(resultado, Len(resultado) - idecimal) & "," & Right(resultado, idecimal)
End If

Debug.Print resultado

Att,

 

Cláudio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia pessoa desculpe a demora para responder, bom é 1000g mesmo mas consegui resolver essa bom eu usei uma função que eu peguei no vbmania.com.br que coloca zero a esquerda o que cliente seria apenas para mostrar na tela e para relatorios o banco e as calculos de peso ficaram iguais ai ficou facil era so tranformar em string e usar o mid. Vou postar para você verem como ficou

Coloque essa função em um modulo

 

Public Function ZeroEsquerda(sValor As String, nQtdeZeros) As String

  ' ******************************************************
  ' preencher com zeros a esquerda.
  'sValor -> número a ser modificado
  'nQtdeZeros -> qtde. de zeros a esquerda
  'Exemplo: ZeroEsquerda("15",5) -> resultado "00015"
  ' ******************************************************

  Dim nI As Integer
  Dim nQtdeSerPreenchida As Integer
  Dim sResultado As String

  If nQtdeZeros = 0 Then
    MsgBox "Faltou o VALOR Do Segundo Parâmetro", vbInformation + vbOKOnly, "AVISO"
    ZeroEsquerda = sValor
  Else
    nQtdeSerPreenchida = nQtdeZeros - Len(sValor)
    If nQtdeSerPreenchida < 0 Then
      ZeroEsquerda = sValor
    Else
      sResultado = sValor
  
      For nI = 1 To nQtdeSerPreenchida
        sResultado = "0" + sResultado
      Next nI
      ZeroEsquerda = sResultado
    End If
  End If

End Function

Para chamar ela:

 

Private Function ShowListIngrediente()

dim wPesMax as string, wPesMin as string
dim sPesMax as string, sPesMin as string

sPesMin = ZeroEsquerda(rs("pesmin"),5)
sPesMax = ZeroEsquerda(rs("pesmax"),5)

if sVirgula=0 then
wPesMax=sPesmax
wPesMin=sPemin
elseif sVirgula=1 then
wPesMax=mid(sPesmax,1,4) & "," & mid(sPesMax,5,1)
wPesMin=mid(sPesmin,1,4) & "," & mid(sPesmin,5,1)
elseif sVirgula=2 then
wPesMax=mid(sPesmax,1,3) & "," & mid(sPesMax,4,2)
wPesMin=mid(sPesmin,1,3) & "," & mid(sPesmin,4,2)
elseif sVirgula=3 then
wPesMax=mid(sPesmax,1,2) & "," & mid(sPesMax,3,3)
wPesMin=mid(sPesmin,1,2) & "," & mid(sPesmin,3,3)
elseif sVirgula=4 then
wPesMax=mid(sPesmax,1,1) & "," & mid(sPesMax,2,4)
wPesMin=mid(sPesmin,1,1) & "," & mid(sPesmin,2,4)
elseif sVirgula=5 then
wPesMax= "0," & mid(sPesmax,1,5) 
wPesMin= "0," & mid(sPesmin,1,5) 
end function

E viu chara a sua logica é issomo você entendeu legal apenas retificando 1000g e nao 1000kg
obrigado pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só uma dica.

 

Ao invés de usar esse monte de elseif, utilize select case. Isso diminuirá processamento. Do jeito que está, ele faz cada verificação para ver se é verdadeira, usando select case ganha processamento pois não verifica linha por linha. Assim:

 

select case sVirgula
  case 0
    wPesMax=sPesmax
    wPesMin=sPemin
  case 1
    wPesMax=mid(sPesmax,1,4) & "," & mid(sPesMax,5,1)
    wPesMin=mid(sPesmin,1,4) & "," & mid(sPesmin,5,1)
   case 2
    wPesMax=mid(sPesmax,1,3) & "," & mid(sPesMax,4,2)
    wPesMin=mid(sPesmin,1,3) & "," & mid(sPesmin,4,2)
  case 3
    wPesMax=mid(sPesmax,1,2) & "," & mid(sPesMax,3,3)
    wPesMin=mid(sPesmin,1,2) & "," & mid(sPesmin,3,3)
end select

E outra coisa, desse jeito que está, usando mid, o resultado é o mesmo se usar right e left. A diferença é que economiza código usando a right e left, por isso aconselhamos.

 

Mas que bom que resolveu.

 

Abraço.

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.