Ir para conteúdo

POWERED BY:

Arquivado

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

Didimo Monteiro

Problema com conversão de string to int

Recommended Posts

Gente, fiz tudo ao meu ver certo e fica dando esse problema, ve se alguem entende ai.

 

 

Captura%20de%20Tela%20(7).gif

 

O código do programa esta todo aqui.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void buttonCalc_Click(object sender, RoutedEventArgs e)
        {
              calculo();
        }

        private void calculo()
        {

            int custo = int.Parse(textBoxValorCusto.Text);
            int frete = int.Parse(textBoxValorFret.Text);
            int total;
            total = frete + custo;

            int n3, n4, n5;

            n3 = total * 2;
            n4 = n3 * 20 / 100;
            n5 = n4 + n3;

            textBoxValorProdut.Text = n3.ToString();
            textBoxValorVenda.Text = n5.ToString();
            textBoxLucro.Text = n4.ToString();

        }
    }
}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que tem no textBoxValorCusto.Text ?

 

Abraços...

 

O usuário iria colocar um valor inteiro... exemplo "12"

 

Ao invés de [inline]int.Parse[/inline] tente [inline]Convert.ToInt32(suatextbox)[/inline]

 

Continua dando exatamente o mesmo erro, ja tinha tentado dessa forma até tentei novamente, e nada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colega, minhas sugestões:

 

1 - Coloque uma validação no campo "textBoxValorCusto" que permita apenas valores numéricos (pode ser em javascript ou com um regularexpressionvalidator);

 

2 - Mesmo com a validação, é obrigatório revalidar no código, porque o javascript pode ser desabilitado no browser;

 

3 - Não use Int32.Parse nem Convert.ToIn32 quando você for verificar o valor numérico. Esses métodos disparam Exceptions quando os valores não funcionam. Faça o seguinte:

int iNumber;
Int32.TryParse(textBoxValorCusto.Text, out iNumber);
if(iNumber != 0) // valor foi validado e é mesmo um número...
{
// código usando o valor...
}
else // se o iNumber for '0', significa que o valor do campo não é um Int32!
{
// mensagem para o usuário inputar o valor correto...
}

ou

int iNumber;
if(Int32.TryParse(textBoxValorCusto.Text, out iNumber)) // se for true, o valor é numérico e será aplicado à variável iNumber
{
// código usando o iNumber...
}

Espero que ajude!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem certeza que o valor da textbox não contem nenhuma virgula ou ponto? Porque isso é muito estranho cara, o código está correto.

Tenho certeza, segue o print do preenchimento que vou fazer ANTES de da o erro.

 

Captura%20de%20Tela%20(8).gif

 

Peço desculpas pelo visual ridículo, mas estou tentando resolver essa questão e nem liguei ainda pro visual do programa.

 

Colega, minhas sugestões:

 

1 - Coloque uma validação no campo "textBoxValorCusto" que permita apenas valores numéricos (pode ser em javascript ou com um regularexpressionvalidator);

 

2 - Mesmo com a validação, é obrigatório revalidar no código, porque o javascript pode ser desabilitado no browser;

 

3 - Não use Int32.Parse nem Convert.ToIn32 quando você for verificar o valor numérico. Esses métodos disparam Exceptions quando os valores não funcionam. Faça o seguinte:

int iNumber;
Int32.TryParse(textBoxValorCusto.Text, out iNumber);
if(iNumber != 0) // valor foi validado e é mesmo um número...
{
// código usando o valor...
}
else // se o iNumber for '0', significa que o valor do campo não é um Int32!
{
// mensagem para o usuário inputar o valor correto...
}

ou

int iNumber;
if(Int32.TryParse(textBoxValorCusto.Text, out iNumber)) // se for true, o valor é numérico e será aplicado à variável iNumber
{
// código usando o iNumber...
}

Espero que ajude!

 

Primeiramente obrigado pela ajuda.

 

Bom, eu estou fazendo uma aplicação desktop e nao uma aplicação Web, pelos meu pouco conhecimento, não se usa JavaScript em aplicações Desktop, mas vou da uma pesquisada nesse 'regularexpressionvalidator' que vc disse ai.

 

Vou tentar fazer o código como vc disse ai, sinceramente nunca tinha visto essa sintaxe, mas vou tentar e posto os resultados.

 

Consegui resolver, como o amigo disse acima. A sintaxe ficou exatamente assim.

 

 

 private void calculo()
        {
            int n1, n2, total;
            Int32.TryParse(textBoxValorProdut.Text, out n1);
            Int32.TryParse(textBoxValorFret.Text, out n2);

            total = n1 + n2;

            int n3, n4, n5;

            n3 = total * 2;
            n4 = n3 * 20 / 100;
            n5 = n4 + n3;

            textBoxValorCusto.Text = n3.ToString();
            textBoxValorVenda.Text = n5.ToString();
            textBoxLucro.Text = n4.ToString();

        }

 

Agradeço a ajuda de TODOS, mas gostaria de pedir mais um favor, como a minha intenção não é apenas escrever programas, gostaria de entender porque daquela forma não funciona, caso alguém possa me explicar ficarei muito grato.

 

Obrigado mais uma vez a todos que me ajudaram, pois foram muito atenciosos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, provavelmente o código não estava funcionando devido ao fato de que alguma exceção não tratada estava sendo disparada antes ou durante a execução do método, o método tryparse não manda exceções, evitando o erro, porém é muito provável que esta exceção volte a te atormentar no futuro, então fique ligado nas conversões.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o Doctor tem razão! mesmo tratando todas as conversões usando condições para evitar erros, sempre, sempre, sempre use o try catch! Seja para tratar a Exception ou simplesmente para ocultá-la do usuário.

 

Sua solução ficou ótima. Eu não havia percebido que se tratava de uma desktop application, por isso sugeri o JS.

 

Abs!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, provavelmente o código não estava funcionando devido ao fato de que alguma exceção não tratada estava sendo disparada antes ou durante a execução do método, o método tryparse não manda exceções, evitando o erro, porém é muito provável que esta exceção volte a te atormentar no futuro, então fique ligado nas conversões.

 

 

o Doctor tem razão! mesmo tratando todas as conversões usando condições para evitar erros, sempre, sempre, sempre use o try catch! Seja para tratar a Exception ou simplesmente para ocultá-la do usuário.

 

Sua solução ficou ótima. Eu não havia percebido que se tratava de uma desktop application, por isso sugeri o JS.

 

Abs!

 

 

Obrigado pela ajuda, vou da uma olhada em relação a Try Catch, eu ja estudei sobre isso, mas confesso que está muito "apagado" da minha mente, vou da uma olhada, e futuramente tentar tratar com try catch. Obrigado a todos que me ajudaram.

 

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.