C# 输入字符串的格式不正确。将字符串转换为双精度

C# 输入字符串的格式不正确。将字符串转换为双精度,c#,string,C#,String,我是C#的初学者,空字符串到双精度转换可以在按钮1_单击事件下执行。但是在公共表单1()下执行此操作会产生此错误 输入字符串的格式不正确 格式 这是代码…(form1.cs和Guy.cs类) Guy.cs代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplica

我是C#的初学者,空字符串到双精度转换可以在
按钮1_单击
事件下执行。但是在
公共表单1()下执行此操作会产生此错误

输入字符串的格式不正确 格式

这是代码…(form1.cs和Guy.cs类)

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)引起的行,当我在它前面的If()中尝试
double.TryParse(textbox2.Text,out x)
时,它返回false

请问如何解决这个问题? 提前谢谢。

这应该没问题

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

从A开始继续回答:

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

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

您所做的是尝试解析,如果解析失败,则执行其他操作。由于用户可以输入他们想要的任何内容,这保证了如果您无法解析输入(因为它不是十进制),您可以很好地处理它,并告诉他们修复输入。

问题似乎在于您没有处理正确的用户输入。您正在尝试将字符串从文本框解析为双精度,但没有提示可能无法解析该字符串(例如,用户可以在文本框中输入'abcd'。您的代码应该使用TryParse方法,并在未分析输入时显示错误消息


我猜解析失败是因为非数字输入或文化问题(例如用户输入的数字中有“.”作为设计符号,带有“,”)。

谢谢,但我对此感到厌倦,当我将其作为条件放入if()时,它返回false,并且转换没有执行。@rafael-向我们展示不工作的代码如何进行转换?用户的windows区域设置是什么?有时在字段中插入“0001”之类的值时,无法正确转换为“0.001”,而是转换为“0001.0”,这是无效的;它将跳过guy1=新Guy();这将使整个Guy类无法使用,即使我使用了警告消息而不是返回;它将为textbox2分配一个永久的0值,然后程序将始终给出“现金不足”消息。。。所以我必须给textbox2一个永久值,奇怪的是,在运行时程序只使用它,即使我更改了它,它也会使用初始值!!嘿,拉斐尔,无意冒犯,但我认为你应该看看一本编程入门书。我给出的答案解决了这个问题,但你需要让一些基础工作做得更好:)。@Rafael-你可能还想重写OnClosing()方法,以捕捉用户点击Enter并关闭表单的情况。@Rafael&jvenema-是的,听起来您可能想注释掉
Guy
代码,然后在构造函数和其他方法中放置消息框或断点。运行代码(或者更好,在调试器中逐步执行),并查看每个方法何时执行(以及以何种顺序执行)。这可能会让事情变得更清楚。问题是,我希望textbox2不包含任何值,这样用户就可以输入他们想要的现金金额,但当form1开始初始化时,它会检查它是否有数字值,并根据该值进行操作!但是我想让它空着!!啊,好的。好吧,您正试图获取表单构造函数中字段的内容。这是在表单显示给用户之前,您要返回的字符串可能是空的,因此您总是无法从该空字符串中解析double。
double d;
if(!Double.TryParse(textBox2.Text, out d)){
    return; // or alert, or whatever.
}

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