Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
theWoolf
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 4
1

Чтение из файла, тип данных float

04.05.2016, 11:24. Просмотров 1084. Ответов 3
Метки нет (Все метки)

Подскажите пожалуйста, в чём может быть проблема, и как её решить, читаю из файла строку, пытаюсь занести число с плавающей запятой в переменную float но почему то заносит только целое число.

структура

typedef struct
{
int Num;
char Date[21];
long int VpO;
long int VpOS;
long int Vp;
int VpS;
float Vc;
int VcS;
float VcO;
int VcOS;
float p;
int pS;
float T;
int TS;
float K;
int KS;
float KK;
int KKS;
int St2;
int St4;
int St7;
int St6;
int Sysst;
char Co[6];
int Nom;
char KC[5];
}mF;

mF myFile;

считываю из переменной char, в переменную всё хорошо считывается, проверенно

42416 20.04.2015 09:00:00 13521351 0 13518186 0 19898222.0755 0 19902857.5007 0 1.42493 0 4.61 0 0.99867 0 1.48617 0 0 0 0 0 0 0x8104 54208 CRCO

sscanf(Rashod,"%i%20c%i%i%i%i%f%i%f%i%f%i%f%i%f%i%f%i%i%i%i%i%i%6c%d%5c",&myFile.Num,myFile.Date,&myFile.VpO,&myFile.VpOS,&myFile.Vp,&myFile.VpS,&myFile.Vc,&myFile.VcS,&myFile.VcO,&myFile.VcOS,&myFile.p,&myFile.pS,&myFile.T,&myFile.TS,&myFile.K,&myFile.KS,&myFile.KK,&myFile. KKS,&myFile.St2,&myFile.St4,&myFile.St7,&myFile.St6,&myFile.Sysst,myFile.Co,&myFile.Nom,myFile.KC);

интересует только то что выделено красным


почему то в переменной myFile.Vc у меня записывается только до точки 19898222

Добавлено через 6 минут
Менял в строке и '.' на ',' не помогает=)

Добавлено через 3 минуты
если добавить .4%f для чтения, то вообще ничего не считывает в переменную=)

Добавлено через 1 минуту
видел ответ в другой тебе
Цитата Сообщение от Humanoid Посмотреть сообщение
Как исправить не знаю.
Простите Си знаю лишь через призму C++, поэтому не рискну поставить теги Си, но вот мой пример:
C++Выделить код
#include <stdio.h>
#include <cstdlib>
#include <locale.h> /* Для русского языка */

int main(void)
{
float a=3.21;
setlocale(LC_ALL,"Russian");
printf("%.4f\n", a);

setlocale(LC_ALL,"English");
printf("%.4f\n", a);
system("pause");
return 0;
}
При этом scanf воспринимает разделители аналогично. (по-крайне мере в С++ так)
подскажите где взять local.h пишу на WinCC =)

Добавлено через 1 час 8 минут
решил проблему считывая из строки как текст и с помощью функции atof потом передаю в double переменную

Добавлено через 10 минут
Цитата Сообщение от theWoolf Посмотреть сообщение
решил проблему считывая из строки как текст и с помощью функции atof потом передаю в double переменную
не получиться так, потому что в файле может быть число без десятых, сотых частей, тогда лишнего прочитаю
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2016, 11:24
Ответы с готовыми решениями:

Динамические массивы и тип данных float
Здравствуйте, к слову массивы так не создаются, наверное, но dev-c++ такой метод создания принимает...

Типы данных: чем отличается тип данных int от float?
Всем привет! Помогите пожалуйста, чем отличается тип данных int от float?

Тип данных float
Столкнулся с такой проблемой, что много записей в базе с большим количеством знаков после запятой...

Тип данных float
Подскажите в каких случаях используют тип данных float. Гугл ничего не дал, кроме того что это...

Тип данных float
Здравствуйте. У меня проблема с типом данных. С текстового файла я считываю цифры типа 0.00300,...

3
nimazzzy
Заблокирован
04.05.2016, 12:17 2
Лучший ответ Сообщение было отмечено theWoolf как решение

Решение

Попробуй использовать double, а не float, и спецификатор %lf для этих чисел.
1
theWoolf
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 4
04.05.2016, 13:25  [ТС] 3
надо использовать именно double, но к с этим типо ничего не считывается из строчки, другие варианты тоже все пробовал какоето другое число появляется в переменной в -35 степени=)

Добавлено через 58 минут
Цитата Сообщение от nimazzzy Посмотреть сообщение
Попробуй использовать double, а не float, и спецификатор %lf для этих чисел.
ради эксперимента попробовал снова, заработало+) спасибо огромное!
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4848 / 2492 / 696
Регистрация: 18.10.2014
Сообщений: 4,326
07.05.2016, 07:31 4
Во-первых, почему в программе поля типа long int читаются при помощи %i?

Во-вторых, количество значащих десятичных цифр, представимых точно во float находится между 6 и 9. Поэтому ни о каком представлении дробной части вашего 19898222.0755 в принципе и речи быть не может.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2016, 07:31

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

Тип данных Float
Доброго времени суток! у меня такая проблема (Delphi 7): задаю переменную var s1: float;, а...

Тип данных float
1) Какое масимальное целое может содержать float? 2) Точность дробной части у float постоянна, или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru