Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] String to double

Ответить
Настройки темы
C/C++ - [решено] String to double

Аватара для Prof

Пользователь


Сообщения: 64
Благодарности: 2


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: Prof
Дата: 06-04-2014
Доброго времени суток, ув. форумчане! Нужно написать ф-цию которая строку типа 1:0.2:2 разбивает на переменные типа double (float) со значениями 1, 0.2, 2. Вся проблема в том что в десятичном виде отбрасывает дробную часть.
Код: Выделить весь код
int input_interval()
{
	string interval, interval_part[3];
	getline(cin, interval, '\n');
	for (int i = 0, j = 0, from = 0; i <= interval.length(); i++)
	if ((interval[i] == ':') || (i == interval.length()))
	{
		interval_part[j] = interval.substr(from, i - from);
		from = i + 1;
		j++;
	}
	x1 = atof(interval_part[0].c_str());
	dx = atof(interval_part[1].c_str());
	x2 = atof(interval_part[2].c_str());
	return 0;
}

Отправлено: 00:41, 06-04-2014

 

Аватара для Tau_0

Ветеран


Сообщения: 6211
Благодарности: 1393

Профиль | Отправить PM | Цитировать


В фортране есть функции FRACTION, FLOOR См.
Справочное руководство по языку Fortran 95
Выделение дробной части в Fortran

И там эта проблема решается довольно просто, а вот есть ли такие на Сях мне невеведомо...???... --- Поищите...

Отправлено: 09:11, 06-04-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Так пойдёт?
Код: Выделить весь код
...
   String interval = "1:0.2:2"; // Тест-строка

   TStringList *lDigital = new TStringList(); // Сюда будем сохранять разбиваемую строку по знаку ":"
   TSysCharSet chPoint;
   chPoint << ':'; // Объявляем разбиваемый символ, можно например указать несколько << '#' << ':' 

   ExtractStrings(chPoint, chPoint, interval.c_str(), lDigital); // разбиваем нашу строку по заданому символу в chPoint и сохраняем все разбивки в массив строк

   double *array = new double[lDigital->Count]; // Создаём динамический массив для double

   for(int i = 0; i < lDigital->Count; i++) // обходим циклом массив строк
      array[i] = lDigital->Strings[i].ToDouble(); // в array наши числа    

   delete lDigital;
   delete array;
...
Написал и перечитал внимательно задание, похоже вам консольный вариант нужен?

Код: Выделить весь код
//Строки, использование strtok
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

#include <cstring.h>

int main()
{
   char string[] = "ETO PREDLOGENIE SODERGIT PYAT LEKSEM";
   char *tokenPtr;
   int z;

   cout << "STROKA RAZBIVAETSYA NA LEKSEMI:\n" << string <<"\n\nLEKSEMI:  \n\n";

   tokenPtr = strtok(string, " "); // Разбивка предложения по пробелу

   while(tokenPtr != NULL){
       cout << tokenPtr << '\n'; // Вместо вывода на экран, сохраняйте в массив.
       tokenPtr = strtok(NULL, " ");
      }
   cin >> z;
        return 0;
}
//---------------------------------------------------------------------------
Цитата Prof:
Вся проблема в том что в десятичном виде отбрасывает дробную часть. »
Не проверял если честно, попробуйте приведение типов через static_cast

Код: Выделить весь код
char str = "2.2";
double number = static_cast<double>(str);

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:59, 06-04-2014 | #3


Аватара для Prof

Пользователь


Сообщения: 64
Благодарности: 2

Профиль | Отправить PM | Цитировать


Разобрался, вся проблема была в форме представления десятичного числа. 0,1 переводит нормально, а в 0.1 отбрасывает дробную часть
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:56, 06-04-2014 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] String to double

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Double Commander 0.5.3 + Portable OSZone Software Новости программного обеспечения 0 25-02-2012 13:30
Java - проблема с Double в Scanner'е Kremlin Программирование и базы данных 2 14-10-2011 21:40
Double Driver 4.0 OSZone Software Новости программного обеспечения 0 14-04-2010 22:30
Double Vision 3.0 OSZone Software Новости программного обеспечения 0 08-04-2010 16:30
Как округлить double? Sharkky Программирование и базы данных 2 23-09-2003 09:27




 
Переход