Входная строка была не в правильном формате. Преобразование строки в двойную - PullRequest
4 голосов
/ 14 марта 2010

Я довольно новичок в C #, преобразование пустой строки в двойное может быть выполнено в событии button1_click, но при этом в Public Form1() это дает мне эту ошибку

Неправильная строка ввода формат.

Вот код .. (form1.cs и класс Guy.cs)

 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Windows.Forms;

 namespace WindowsFormsApplication1
 {
     public partial class Form1 : Form
     {
        public Form1()
        {
            InitializeComponent();

            guy1 = new Guy() ;
            guy1.guyname = textBox1.Text;                
            guy1.guycash = double.Parse(textBox2.Text);
        }                 

    }

    Guy guy1 ;

    private void button1_Click(object sender, EventArgs e)
    {

        label5.Text = guy1.TakeCash(double.Parse(textBox3.Text)).ToString();

    }
 }


}

Код Guy.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    class Guy
    {
        private string name;
        private double cash;

        public string guyname
        {
            get { return name; }
            set { name = value; }
        }

        public double guycash
        {
            get { return cash ; }
            set { cash = value; }
        }



        public double TakeCash(double amount)
        {
            if (cash > amount)
            {
                cash -= amount;
                return cash;
            }
            else
            {
                MessageBox.Show("Not enough Cash.");
                return 0;
            }
        }


    }
}

ошибка вызвана строкой guy1.guycash = double.Parse(textBox2.Text);, когда я пытаюсь double.TryParse(textbox2.Text, out x) в If () перед ней, она возвращает false.

как это решить пожалуйста? заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 14 марта 2010

Продолжая ответ от astanders:

double d;
if(!Double.TryParse(textBox2.Text, out d)){
    return; // or alert, or whatever.
}

guy1 = new Guy() ;
guy1.guyname = textBox1.Text;                
guy1.guycash = d;

То, что вы делаете, - это попытка разбора, а в случае неудачи - какое-то другое действие. Поскольку пользователь может вводить все, что хочет, это гарантирует, что если вам не удастся проанализировать ввод (потому что это не десятичное число), вы можете легко обработать его и сказать ему исправить ввод.

2 голосов
/ 14 марта 2010

Это должно быть хорошо

double d;
Double.TryParse(String.Empty, out d);

Метод Double.TryParse (String, Double%)

1 голос
/ 14 марта 2010

Похоже, проблема в том, что вы не обрабатываете неправильный ввод данных пользователем. Вы пытаетесь разобрать строку из текстового поля, чтобы удвоить ее, не предполагая, что она может быть не проанализирована нормально (например, пользователь может ввести «abcd» в текстовое поле). Ваш код должен использовать метод TryParse и показывать сообщение об ошибке, когда ввод не был проанализирован.

Я полагаю, что синтаксический анализ не выполняется из-за нецифрового ввода или из-за проблем с культурой (например, у вас есть "." В качестве десятичного символа по номеру ввода пользователя с ",").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...