Jump to content
PauloFMarques

Converter para decimal

Recommended Posts

PauloFMarques

Boa tarde, gostaria de saber qual a melhor forma de converter os dados de uma textbox para decimal!

Já experimentei diversas formas como por exemplo:

cdec(textbox.text)

cdec(val(textbox.text))

decimalVal = System.Convert.ToDecimal(textbox.text)

decimal.parse(textbox.text) [este ultimo não tenho a certeza do código que usei, pois já foi à uns tempos].

E o mais perto que tive de conseguir converter foi com o cdec(val(Textbox.text)) em que o resultado ao inserir, por exemplo "123,45" é "123,00", todos os outros dão erro de conversão.

A razão pela qual eu preciso disto é que tenho de inserir estes dados numa BD em SQL,  e que o campo está definido como "decimal(18,2)"

Obrigado desde já pela ajuda.

PauloMarques


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

TextBox2.Text = FormatNumber(TextBox1.Text, 2)

Se o valor for

15,123 ele dá 15,12

Se for

15,125 = 15,13


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
PauloFMarques

Muito obrigado resolveu na perfeição!

Já estava a dar em maluco, e por acaso quando olhei para a tua resposta pensei que não fosse resultar, pois arredondas o último numero decimal, e não parecia resultar para aquilo que queria, mas acabou por funcionar. Mais uma vez obrigado!

Esqueci-me que tinha estado a fazer uns testes e alterei o tipo de dado, por isso é que a tua resolução funcionou, voltei ao ponto de partida, pois ao alterar novamente o tipo de dados não funciona, continua a dar erro de conversão.


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
Andrepereira9

Se puderes mostrar o código...


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
thoga31

Imaginemos que temos uma variável do tipo Decimal e que queremos lá gravar o que está na TextBox1 com 2 casas decimais:

Dim numero As Decimal = Math.Round(Convert.ToDecimal(TextBox1.Text), 2)

Caso o que está na TextBox não seja um número, pode dar "buraco" no Convert. Para contornar isso:

If Decimal.TryParse(TextBox1.Text, numero) Then
     numero = Math.Round(Convert.ToDecimal(TextBox1.Text), 2)
Else
     'Mensagem de erro
End If

Cumpz. :P


Knowledge is free!

Share this post


Link to post
Share on other sites
PauloFMarques

@Adrepereira9

Só tenho o código de inserção:

 Dim varsql As String = "insert into computadores(CodComputador, Marca, Caracteristicas, Nome, NumSerie, NomeFunc, Uso, VersaoSO, VersaoOffice, DataCompra, NumFactura, Garantia, Fornecedor, ValorSemIva, ValorSeguro, CarepaqInicio, CarepaqFim, Observacoes, MacAddress)" & _
            "values('" & CodComputadorTextBox.Text & "','" & MarcaTextBox.Text & "','" & CaracteristicasTextBox.Text & "','" & NomeTextBox.Text & "','" & NumSerieTextBox.Text & "','" & NomeFuncComboBox.Text & "','" & _
            UsoCheckBox.CheckState & "','" & VersaoSoComboBox.Text & "','" & VersaoOfficeComboBox.Text & "','" & data.ToString("yyyy.MM.dd") & "','" & NumFacturaTextBox.Text & "','" & GarantiaTextBox.Text & "','" & FornecedorTextBox.Text & "','" & ValorSemIvaTextBox.Text & "','" & _
          ValorSeguroTextBox.Text & "','" & DataCarepaqInicio.ToString("yyyy.MM.dd") & "','" & DataCarepaqFim.ToString("yyyy.MM.dd") & "','" & ObservacoesTextBox.Text & "','" & MacAddressTextBox.Text & "')"

As textboxs: ValorSemIva e ValorSeguro são as que tenho de converter.

@thoga31

Já experimentei esse código também, e nada, continua a dar erro.


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
thoga31

Qual erro?

Idem, era o que ia perguntar :P

É que eu testei-o, e não me deu erro.


Knowledge is free!

Share this post


Link to post
Share on other sites
PauloFMarques

"Error converting data type varchar to numeric"


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
thoga31

Erro de compilação, erro de execução...?

Tenho poucos dados para lançar outra solução, pois não há muito mais do que o Convert, o Parse e o FormatNumber.


Knowledge is free!

Share this post


Link to post
Share on other sites
PauloFMarques

Erro de execução.

Pois eu já experimentei todos esses e em todos dá-me o mesmo erro. :wallbash:


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
Caça

Não estás a conseguir porque o numero que está na textbox está com virgula, por exemplo:

Se na textbox estiver 1,50 se converteres para decimal ficaria 150 em vez de 1.50


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
PauloFMarques

@Caça

Então como é que devo inserir na textbox?


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
Caça

Antes de mais, essa query está correcta? Já a testaste? Esse erro que te está a dar vem do SQL não da conversão...


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
PauloFMarques

Sim a query está correcta, porque se utilizar cdec(val(textbox.text)) ele passa os números inteiros encontrados, por exemplo se eu inserir 123,45 ele pasa para a base de dados 123,00.


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
Caça
Decimal.Parse(Valor_a_Converter).ToString


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
PauloFMarques

Continua a dar o mesmo erro. :wallbash:


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
Caça

O acho que o erro está na query

Dim a As String = "123,45"
MessageBox.Show(Decimal.Parse(a).ToString) 'Funciona - Output -> 123,45
MessageBox.Show(CDec(Val(a)).ToString) 'Não funciona - Output -> 123
'-----------------------
Dim b As String = "123.45"
MessageBox.Show(Decimal.Parse(b).ToString) 'Não funciona - Output -> 12345
MessageBox.Show(CDec(Val(b)).ToString) 'Funciona - Output -> 123,45


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
PauloFMarques

Mas eu já tentei inserir dados separados com ".", ou seja fazer o tal "123.45" e ele o que me faz é apagar o "." assim que eu saio da textbox.

Ou seja, o output que dá é "12345,00", e é isso que guarda na base de dados.


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
Caça

Eu apenas mostrei-te como deverias fazer para cada situação. Se o numero tiver virgula, usa a primeira, se não, usa a segunda.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.