CDBL OU MULTIPLICA O VALOR ?
Eu tenho um valor que estra vindo como string assim
Dim valor As String = [Ô]2240.00[Ô]
Para formatar ele para valor (R$) eu tenho que converter ele para poder usar o format certo? foi essa maneira que eu achei =s
então pela logica eu faço isso
Dm ValorDoub As Double = Cdbl(valor)
Só que quando eu faço ele converter de String(Valor) para o Double(ValorDoub)
Ele pega o [Ô]2240.00[Ô] e faz virar 224000.0 Por quê ? No VB6 isso ia normal
Ai a coisa piora por que para eu poder formatar este valor com o format ele tem que ser numerico Ex.
Format(224000.0, [Ô]C[Ô]) ele faz virar : R$ 224.000,00
Então como eu posso formatar um valor corretamente sendo que o cdbl faz ele [Ô]crescer[Ô]?
Tem outra forma de usar o format por ex.
Format(valor, [Ô]##,##0.00[Ô]) igual no VB6 ? por que eu fui tentar usar esse tipo de formatação e não foi =(
2 - Para valores numéricos, use tipo de dados numéricos, se você precisa exibir valores numéricos com formatos diferentes, use o format com suas opções corretas
Você pode corrigir isso fazendo a conversão assim:
Dim ValorDoub As Double = Convert.ToDouble(valor, Globalization.CultureInfo.InvariantCulture)
Usando o InvariantCulture ele vai considerar o ponto como separador decimal na hora de fazer a conversão
Citação::
O problema na conversão é a cultura que está sendo usada, no caso provavelmente é pt-BR, que diz que o separador decimal é a vÃrgula, o ponto é apenas o de agrupamento de dÃgitos
Você pode corrigir isso fazendo a conversão assim:
Dim ValorDoub As Double = Convert.ToDouble(valor, Globalization.CultureInfo.InvariantCulture)
Usando o InvariantCulture ele vai considerar o ponto como separador decimal na hora de fazer a conversão
Isso mesmo funcionou, obrigado essa era o problema, então ele leva em conta o tipo de valor que esta formatado o windows ?
Dim valor As String = Val([Ô]2240.00[Ô])
Dim MyDouble As Double
[ô]MyDouble = CDbl(valor)
MyDouble = (valor)
TextBox2.Text = FormatCurrency(MyDouble)
[ô]TextBox1.Text = Format(MyDouble, [Ô]##,##0.00[Ô])
TextBox1.Text = Format(CDbl(valor), [Ô]Currency[Ô])
Não vá contra o Famigerado.
Citação::
Faça um teste deste jeito.
Dim valor As String = Val([Ô]2240.00[Ô])
Dim MyDouble As Double
[ô]MyDouble = CDbl(valor)
MyDouble = (valor)
TextBox2.Text = FormatCurrency(MyDouble)
[ô]TextBox1.Text = Format(MyDouble, [Ô]##,##0.00[Ô])
TextBox1.Text = Format(CDbl(valor), [Ô]Currency[Ô])
Não vá contra o Famigerado.
Tambem Funcionou o comando val([Ô]String[Ô]) ele deixa a mesma propriedade do comando Convert.ToDouble(valor, Globalization.CultureInfo.InvariantCulture)?
Por exemplo, o valor [Ô]100.99[Ô] ele converte para 100,99, porém o valor [Ô]100,99[Ô] ele converte para 100, pois ele considera a vÃrgula como texto
Se você passar um valor do tipo [Ô]100.99 teste[Ô] ele converte para 100,99 ignorando o texto que tinha no final, porém se o valor começar com qualquer coisa que não seja numérico ele retorna 0
Valores do tipo [Ô]1.001,99[Ô] ele vai converter para 1,001 pois vai considerar o primeiro ponto como sendo o separador de casas decimais e a vÃrgula como texto, ignorando ela e tudo que vem depois.
No geral eu não recomendo usar o Val, acho muito melhor usar as funções de conversão que só convertem se o valor estiver no formato correto, já que val nunca retorna erro se passarem um valor incorreto pode-se nem perceber que o valor está errado até ser tarde demais, acho que é uma função que tenta ser muito genérica, ela pode acabar fazendo algo que você não queria que ela fizesse
Citação::
O Val é um pouco diferente da outra conversão, ele ignora a cultura atual, considera apenas o ponto como separador decimal e não considera nada como agrupamento de dÃgitos, e ele aceita valores não numéricos, porém ele para de tentar converter assim que ele acha um valor que não é numérico, e tenta converter valores que estão em outro formato, como caso ele encontre um &H no começo do texto ele tenta converter de hexadecimal para decimal
Por exemplo, o valor [Ô]100.99[Ô] ele converte para 100,99, porém o valor [Ô]100,99[Ô] ele converte para 100, pois ele considera a vÃrgula como texto
Se você passar um valor do tipo [Ô]100.99 teste[Ô] ele converte para 100,99 ignorando o texto que tinha no final, porém se o valor começar com qualquer coisa que não seja numérico ele retorna 0
Valores do tipo [Ô]1.001,99[Ô] ele vai converter para 1,001 pois vai considerar o primeiro ponto como sendo o separador de casas decimais e a vÃrgula como texto, ignorando ela e tudo que vem depois.
No geral eu não recomendo usar o Val, acho muito melhor usar as funções de conversão que só convertem se o valor estiver no formato correto, já que val nunca retorna erro se passarem um valor incorreto pode-se nem perceber que o valor está errado até ser tarde demais, acho que é uma função que tenta ser muito genérica, ela pode acabar fazendo algo que você não queria que ela fizesse
Entendi então por questão de segurança o val é menos aconselhado mesmo, Obrigado pela a ajuda