EQUACOES COM TEXBOX
Boa tarde.
Como disse em um tópico anterior, eu fazia as minhas aplicações em VB.NET e estou migrando para C#. A minha pior dificuldade com a nova linguagem é com as equações matemáticas. Coisas que até para mim pareciam muito simples com o VB, no C# parece grande complicação.
Por exemplo. No VB se eu quisesse fazer a seguinte operação: Texbox1 = ((Textbox2 - Textbox3) * Textbox4)
O código seria:
Como seria essa estrutura no C#. Obrigado pela ajuda.
Como disse em um tópico anterior, eu fazia as minhas aplicações em VB.NET e estou migrando para C#. A minha pior dificuldade com a nova linguagem é com as equações matemáticas. Coisas que até para mim pareciam muito simples com o VB, no C# parece grande complicação.
Por exemplo. No VB se eu quisesse fazer a seguinte operação: Texbox1 = ((Textbox2 - Textbox3) * Textbox4)
O código seria:
TextBox1.Text = (CDbl(TextBox2.Text) - CDbl(TextBox3.Text)) * CDbl(TextBox4)
TextBox1.Text = Format(TextBox1.Text, [Ô]Currency[Ô])
Como seria essa estrutura no C#. Obrigado pela ajuda.
Isso ai é um vÃcio de usuários do VB, o qual faz conversão automática de texto para número quando se tenta fazer operações aritméticas com ele.
O correto seria você primeiro converter os valores para número e depois fazer as contas, usando variáveis apropriadas para isso, depois de ter o resultado em uma variável numérica ai sim você atribui ela para o textbox, já formatando ela de acordo com a necessidade.
O correto seria você primeiro converter os valores para número e depois fazer as contas, usando variáveis apropriadas para isso, depois de ter o resultado em uma variável numérica ai sim você atribui ela para o textbox, já formatando ela de acordo com a necessidade.
Bom, vamos ver se eu entendi direito. Eu tentei fazer da seguinte forma mas está apresentando erro [Ô] Input string was not in a correct format. [Ô]
decimal Soma1 = 0;
decimal Soma2 = 0;
Soma1 = Soma1 + Convert.ToDecimal(txbVendas.Text);
Soma2 = Soma2 + Convert.ToDecimal(txbDevol.Text);
txbFed1.Text = (Soma1 - Soma2).ToString();
txbFed1.Text = Convert.ToDouble(txbFed1.Text).ToString([Ô]C[Ô]);
decimal total = 0;
total = (decimal.Parse(textBox1.Text) - decimal.Parse(textBox2.Text));
textBox3.Text = total.ToString();
Abraços
total = (decimal.Parse(textBox1.Text) - decimal.Parse(textBox2.Text));
textBox3.Text = total.ToString();
Abraços
Citação::
Bom, vamos ver se eu entendi direito. Eu tentei fazer da seguinte forma mas está apresentando erro [Ô] Input string was not in a correct format. [Ô]
decimal Soma1 = 0;
decimal Soma2 = 0;
Soma1 = Soma1 + Convert.ToDecimal(txbVendas.Text);
Soma2 = Soma2 + Convert.ToDecimal(txbDevol.Text);
txbFed1.Text = (Soma1 - Soma2).ToString();
txbFed1.Text = Convert.ToDouble(txbFed1.Text).ToString([Ô]C[Ô]);
Você fez quase certo, mas por que no final você converte para string, converte de volta para decimal e depois converte de novo para string formatando? Tem também pequenos erros de lógica ali, você não precisa somar a variável com o que foi convertido do textbox
Primeiro você converte os valores, pode ser usado o Convert.ToDecimal ou o decimal.Parse, eu prefiro o segundo
decimal valor1 = decimal.Parse(txbVendas.Text);
decimal valor2 = decimal.Parse(txbDevol.Text);
Depois disso você pode tanto criar uma nova variavel e fazer
decimal total = valor1 - valor2;
txtFed1.Text = total.ToString([Ô]c2[Ô]);
ou pode fazer direto
txtFed1.Text = (valor1 - valor2).ToString([Ô]c2[Ô])
Eu particularmente acho o primeiro modo mais legÃvel que o segundo.
Mas tem outra coisa que você deve se preocupar ai também, que é no caso do usuário ter digitado um valor válido, já que pode ocorrer erro na conversão de texto para numero caso não esteja correto, então pode-se usar algo como o decimal.TryParse para verificar se é válido ao mesmo tempo que converte o texto para número
Guimoraes obrigado pela ajuda, mas a sua sugestão também apresentou o mesmo erro.
OCELOT, eu entendi o que você disse, ficou um pouco mais claro para mim como funciona no C#. No entanto com o código que você menciona acima o mesmo erro foi apresentado.
Algo que eu não mencionei, é que essas Textbox são preenchidas através de uma consulta ao banco de dados, não sei se essa pode ser a causa do problema. As textbox estão formatadas da seguinte forma:
Eu fiz o seguinte teste, apenas digitei valores no TEXTBOX por exempo
Txb1 - 200800,34
Txb2 - 10250,45
e funcionou, ou seja, o problema então está na forma que o dado é escrito na texbox apartir da consulta SQL
Há algo errado na extrutura acima?
OCELOT, eu entendi o que você disse, ficou um pouco mais claro para mim como funciona no C#. No entanto com o código que você menciona acima o mesmo erro foi apresentado.
Algo que eu não mencionei, é que essas Textbox são preenchidas através de uma consulta ao banco de dados, não sei se essa pode ser a causa do problema. As textbox estão formatadas da seguinte forma:
txbVendas.Text = Convert.ToDouble(txbVendas.Text).ToString([Ô]C[Ô]);
txbDevol.Text = Convert.ToDouble(txbDevol.Text).ToString([Ô]C[Ô]);
Eu fiz o seguinte teste, apenas digitei valores no TEXTBOX por exempo
Txb1 - 200800,34
Txb2 - 10250,45
e funcionou, ou seja, o problema então está na forma que o dado é escrito na texbox apartir da consulta SQL
//####################################################################################
//////////////////////////////////////// TEXBOX VENDAS ///////////////////////////////
//####################################################################################
try
{
//Cria adaptador
SqlDataReader objReader1 = cmd1.ExecuteReader();
//se existir dados mostra no textbox TextBoxNome
if (objReader1.Read())
this.txbVendas.Text = objReader1[[Ô]Vendas[Ô]].ToString();
//Fecha adaptador
objReader1.Close();
txbVendas.Text = Convert.ToDouble(txbVendas.Text).ToString([Ô]C[Ô]);
}
catch
{
this.txbVendas.Text = [Ô]0[Ô];
txbVendas.Text = Convert.ToDouble(txbVendas.Text).ToString([Ô]C[Ô]);
}
Há algo errado na extrutura acima?
Fiz outro teste.
Na formatação que mencionei acima é acrescido o simbolo R$ que pra mim é não é tão importante, eu fiz o seguinte teste, apenas apaguei o R$ e mandei calcular, e funcionou, ou seja o problema é a formação que dei para a Texbox no bloco anterior ou seja:
Txb1 - 200800,34 => R$ 200.800,34
Txb2 - 10250,45 => R$ 10.250,45
Apagando apenas o simbolo R$ a formula funcionou perfeitamente ou seja
Txb1 - 200.800,34
Txb2 - 10.250,45
Deu certo, troquei toda a formatação que estava [Ô]C[Ô] por [Ô]N[Ô]. De qualquer forma tenho uma dúvida, no C# não é possivel fazer equações quando os dados estão formatados como [Ô]C[Ô] , ou seja com o simbolo R$ ???
Na formatação que mencionei acima é acrescido o simbolo R$ que pra mim é não é tão importante, eu fiz o seguinte teste, apenas apaguei o R$ e mandei calcular, e funcionou, ou seja o problema é a formação que dei para a Texbox no bloco anterior ou seja:
Txb1 - 200800,34 => R$ 200.800,34
Txb2 - 10250,45 => R$ 10.250,45
Apagando apenas o simbolo R$ a formula funcionou perfeitamente ou seja
Txb1 - 200.800,34
Txb2 - 10.250,45
Deu certo, troquei toda a formatação que estava [Ô]C[Ô] por [Ô]N[Ô]. De qualquer forma tenho uma dúvida, no C# não é possivel fazer equações quando os dados estão formatados como [Ô]C[Ô] , ou seja com o simbolo R$ ???
Acho agora entendi como funcionam as equações no C#
Ficou assim a minha equação:
Ficou assim a minha equação:
decimal valor1 = decimal.Parse(txbVendas.Text);
decimal valor2 = decimal.Parse(txbDevol.Text);
decimal valor3 = decimal.Parse([Ô]5,93[Ô]);
decimal valor4 = decimal.Parse([Ô]100[Ô]);
decimal total = ((valor1 - valor2) * valor3) / valor4;
txbFed1.Text = total.ToString([Ô]N[Ô]);
Hum, achei que teria apenas números no seu textbox, mesmo formatando depois para dinheiro não liguei uma coisa com a outra, mas a solução é simples, você deve simplesmente passar mais um parâmetro para o decimal.Parse
decimal valor = decimal.Parse( txtBox.Text, NumberStyles.Currency );
Acredito que assim ele vai considerar a configuração do sistema para o formato de dinheiro na hora de converter o número
decimal valor = decimal.Parse( txtBox.Text, NumberStyles.Currency );
Acredito que assim ele vai considerar a configuração do sistema para o formato de dinheiro na hora de converter o número
é assim mesmo a sintaxe?
Aqui apresentou erros, de qualquer forma acho que gostei da formatação sem o R$.
decimal valor = decimal.Parse( txtBox.Text, NumberStyles.Currency);
Aqui apresentou erros, de qualquer forma acho que gostei da formatação sem o R$.
Citação::
é assim mesmo a sintaxe?
decimal valor = decimal.Parse( txtBox.Text, NumberStyles.Currency);
Aqui apresentou erros, de qualquer forma acho que gostei da formatação sem o R$.
Você não deve ter adicionado a classe System.Globalization
decimal valor = decimal.Parse(txtBox.Text, System.Globalization.NumberStyles.Currency);
Tópico encerrado , respostas não são mais permitidas