Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

convert string to float

11K
24 февраля 2008 года
PhantomX
35 / / 10.04.2006
На первый взгляд задача невероятно проста, но при переходе с Visual С++ на Visual C# возик такой вопрос (точнее несколько):

Необходимо из файла считать исходные данные.

Читаю файл используя StreamReader и ReadLine.
Файл текстовый все значения записаны в столбик (самый простой вариант).
Когда нужно считать int или string проблем не возникает:
 
Код:
int x = Convert.ToInt32(reader.ReadLine());
string y =  reader.ReadLine();

но как только понадобилось прочитать float - все встал в ступор!
Единственный вариант который нашел это заменить float на double
и попробовать использовать сле-ю конструкцию
 
Код:
double z = Convert.ToDouble(reader.ReadLine());

Но вариант не прокатил с ошибкой на то что не пральный формат строки на входе???? числа в файле представлены в формате 0.000000. Подскажите как быть, и double не очень хотелось бы использовать, float мне подходит больше;

Второй вопрос возник такой
в первом случае у меня данные в файле хранились столбиком:

123
23
строка
0.23423

И в зависимости от структуры исходных данных просто по разному их читал.

Но если они записаны в строку?
К примеру строки интов:
123 323 456 879
В с++ достаточно было использовать fscanf, а в C# я так понял ни чего подобного нет? Пожалуйста помогите!
11K
24 февраля 2008 года
PhantomX
35 / / 10.04.2006
Итак, частично я ответил на свой вопрос сам, если в строке только одно число формата Double или Float, то при его чтении из файла возможны следующие ошибки:
1) стоят лишние пробелы - 12.123 или есть пробелы до и после числа
2) формат знака разделителя - точка или запятая: 12.123 или 12,123
3) другие ошибки я не рассматриваю

для пункта 1 достаточно исклюяить пробелы из строки
для пункта 2 делаем замену точки на запятую

итак получаем
Код:
Stream myStream = null;
StreamReader reader = null;
.
.
.
if ((myStream = openFileDialog1.OpenFile()) != null)
{
   using (myStream)
   {
       reader = new StreamReader(myStream);
       .
       .
       .
      doble x;
      x = Convert.ToDouble(reader.ReadLine().Trim().Replace(".", ","));
   }

}


При этом такой метод поддерживает также чтение чисел в формате +/-xxx,yyye+/-zzz например -1,123e-4!!

Если кто знает Пожалуйста помогете решит второй вопрос если в строке записано несколько чисел,
как их из этой строки считать в массив В си++ аналог fscanf!!!!
6.6K
25 февраля 2008 года
Ordos
105 / / 02.11.2007
Всё очень просто. У типа string есть метод Split, в который передаются символы разделители, а на выходе получается масив строк, например код:

string s = "123 23 432";
foreach (string f in s.Split(' '))
{
Console.WriteLine(f);
}

на выходе даст:
123
23
432
6.6K
25 февраля 2008 года
Ordos
105 / / 02.11.2007
А на будущее советую присмотреться к методам разных типов! Там очень много полезного.
5
26 февраля 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: PhantomX
Итак, частично я ответил на свой вопрос сам, если в строке только одно число формата Double или Float, то при его чтении из файла возможны следующие ошибки:
1) стоят лишние пробелы - 12.123 или есть пробелы до и после числа
2) формат знака разделителя - точка или запятая: 12.123 или 12,123
3) другие ошибки я не рассматриваю

Все гораздо проще, чем вам кажется.

 
Код:
// получаем формат числа для текущей культуры
NumberFormatInfo numInfo = (NumberFormatInfo)CultureInfo.CurrentCulture.NumberFormat.Clone();
// выставляем десятичный разделитель
numInfo.NumberDecimalSeparator = ",";

string number_str = Console.ReadLine().Trim();
// переводим из строки во float (System.Single)
float number = float.Parse(number_str, NumberStyles.Float, numInfo);

Кстати, не забываем добавить в список импорта System.Globalization.

По поводу многих символов - уже упоминалось использование метода Split у класса System.String.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог