Входная строка имеет неверный формат - C# (248637)
Формулировка задачи:
Здравствуйте, у меня не получается справится с проблемой неверного формата переменной. У меня есть 2 формы.
Из второстепенной формы надо считать переменную с numEdit-(а) и передать ее в главную в формате float.
Передача происходит путем создания отдельного класса Data_H во второй форме:
По нажатию на кнопку значение из numEdit-(а) конвертируется в Single и записывается во временную переменную Value.
В главной форме я использую эту переменную для дальнейших действий.
Когда я провожу эмуляцию программы и ввожу в numEdit целочисленную переменную, все обрабатывается без ошибок. Но когда я ввожу дробное число (с точкой) мне выдает следующее исключение:
************** Текст исключения **************
System.FormatException: Входная строка имела неверный формат.
в System.Number.ParseSingle(String value, NumberStyles options, NumberFormatInfo numfmt)
в System.Convert.ToSingle(String value)
в TpsViewFLEX.PartScreen.button1_Click(Object sender, EventArgs e)
в System.Windows.Forms.Control.OnClick(EventArgs e)
в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ScrollableControl.WndProc(Message& m)
в System.Windows.Forms.ContainerControl.WndProc(Message& m)
в System.Windows.Forms.UserControl.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Я так понимаю программа не может перевести строку с точкой в single. Так ли это? Что можно сделать в таком случае?
Спасибо.
************** Текст исключения **************
System.FormatException: Входная строка имела неверный формат.
в System.Number.ParseSingle(String value, NumberStyles options, NumberFormatInfo numfmt)
в System.Single.Parse(String s)
в TpsViewFLEX.PartScreen.button1_Click(Object sender, EventArgs e)
С TryParse почему то вообще не работает, выдавая следующее:
Error 1 'float' does not contain a definition for 'TryParse'
static class Data_H { public static float Value { get; set; } }
private void button1_Click(object sender, EventArgs e) { //Прячет текущую форму this.Hide(); //Передаем переменную в главную форму Data_H.Value = Convert.ToSingle(numEditor1.Text); }
float h = Data_H.Value;
Пробовал сделать через Parse таким образом и тоже не помогло:
Data_H.Value = float.Parse(numEditor1.Text);
Data_H.Value = float.TryParse(numEditor1.Text);
Решение задачи: «Входная строка имеет неверный формат»
textual
Листинг программы
using System; using System.Globalization; namespace ConsoleAppEgrozavr { class Program { static void Main(string[] args) { string str = "1,25"; float f = ToSingle(str); } static float ToSingle(string value) { float f; // Текущая локаль, какая-нибудь. if (Single.TryParse(value, out f)) { return f; } // Русская локаль, с запятой в качестве разделителя. if (Single.TryParse(value, System.Globalization.NumberStyles.Float, CultureInfo.GetCultureInfo("ru-RU"), out f)) { return f; } // Нейтральная локаль, с точкой в качестве разделителя. if (Single.TryParse(value, System.Globalization.NumberStyles.Float, CultureInfo.InvariantCulture, out f)) { return f; } throw new FormatException(); } } }