C# 输入字符串的格式不正确。将字符串转换为双精度
我是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
按钮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;