EQUACOES COM TEXBOX

ROGERIOAZEVEDO 24/09/2012 16:26:20
#410371
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:



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.
OCELOT 24/09/2012 17:02:54
#410375
Resposta escolhida
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.
ROGERIOAZEVEDO 24/09/2012 17:34:06
#410380
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[Ô]);


GUIMORAES 24/09/2012 17:36:34
#410383
decimal total = 0;
total = (decimal.Parse(textBox1.Text) - decimal.Parse(textBox2.Text));
textBox3.Text = total.ToString();



Abraços
OCELOT 24/09/2012 18:15:43
#410391
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
ROGERIOAZEVEDO 25/09/2012 08:05:47
#410406
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:



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?
ROGERIOAZEVEDO 25/09/2012 08:21:25
#410409
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$ ???
ROGERIOAZEVEDO 25/09/2012 09:01:31
#410414
Acho agora entendi como funcionam as equações no C#

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[Ô]);

OCELOT 25/09/2012 09:04:43
#410415
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
ROGERIOAZEVEDO 25/09/2012 09:39:51
#410421
é 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$.
JONATHANSTECKER 25/09/2012 10:07:30
#410426
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);
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas