Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/103: Рейтинг темы: голосов - 103, средняя оценка - 4.73
81 / 40 / 22
Регистрация: 03.05.2013
Сообщений: 722

Преобразование char в float

29.01.2015, 15:31. Показов 21086. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Преобразую char в float, вывожу результат на экран, и проблема вообще очень не приятная, появляются отклонения от заданного числа. Устанавливаю значение 0.12 , а на выходе 0.01999999999
Код
C++
1
float temp = std::stof(state->input_num[who].input);
где
C++
1
char input[64];
Как решить данную проблему?
Изображения
 
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.01.2015, 15:31
Ответы с готовыми решениями:

Преобразование типа char в тип float
При считывании из файла чисел (каждое число расположено на новой строке, целая часть от дробной отделяется точкой). Использую функцию...

Сделать преобразование unsigned char в char, а затем типу int
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char - для копеек. Собственно что мне...

Преобразование char в char* или разделить на две строки
Пытаюсь сделать программу под linux. Возникла проблема, описанная в заголовке. Мне нужно разделить строку в char на две по символу ? либо...

9
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
29.01.2015, 15:37
http://rextester.com/AMPPG9580

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Title of this code
//Compiler Version 18.00.21005.1 for x86
 
#include <string>
#include <iostream>
using namespace std;
 
int main()
{
    
    //увеличивает точность показа дробной части в консоли
    cout.setf(ios::fixed,ios::floatfield); 
    
    char input[64] = "0.12";
 
    float temp = std::stof(input); 
 
    std::cout << "Hello, world!\n";
    std::cout << "value = "<< temp<<'\n';
}
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
29.01.2015, 15:38
Цитата Сообщение от zasadadada Посмотреть сообщение
Преобразую char в float,
во первых char в float не преобразовывается, размер не тот
может имелось в виду строка в виде массива char ???
тогда
Цитата Сообщение от zasadadada Посмотреть сообщение
char input[64];
это одна строка

не понятно что это
Цитата Сообщение от zasadadada Посмотреть сообщение
state->input_num[who].input
Цитата Сообщение от zasadadada Посмотреть сообщение
0.01999999999
а на картинке 0.11999999

на картинке все правильно
почитай про числа с плавающей запятой и как они представлены в компьютере
для нужного вывода прочитай про форматирующий вывод
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
29.01.2015, 15:45
Цитата Сообщение от zasadadada Посмотреть сообщение
Как решить данную проблему?
Ни как. Есть правила представления дробных чисел и таки не все десятичные числа можно представить ввиде конечной дроби в двоичной системе счисления. Так вот при обратном преобразовании теряется точно о чем вас неоднократно и повсеместно предупреждают.
Например число 0,3 в двоичной системе счисления имеет вид 0,0(1001). Т.е. это периодическая дробь. Естесственно, что ее нельзя точно представить в конечном числе разрядов. Вот отсюда и получается подобные ошибки округления.
0
81 / 40 / 22
Регистрация: 03.05.2013
Сообщений: 722
29.01.2015, 16:24  [ТС]
C++
1
2
//увеличивает точность показа дробной части в консоли
    cout.setf(ios::fixed,ios::floatfield);
можно ли как то применить? Но только не для cout?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
29.01.2015, 17:03
Цитата Сообщение от zasadadada Посмотреть сообщение
можно ли как то применить? Но только не для cout?
Разумеется да.

Флаги можно применять к экземплярам стандартных стримов, либо к их потомкам.
Для этого вам нужно ознакомиться с архитектурой потоков ввода/вывода стандартной библиотеки

http://www.cplusplus.com/refer... /iostream/

-----------------------------------------------------------
По поводу текста, как такового:


Все, что вы видите в консоли - это текст.
То есть, когда вы делаете вот так:

float temp = 12.0f;
std::cout << "value = "<< temp<<'\n';

Механизм, что бы показать это на экране, сначала выполняет преобразование:
из числа в строку.

Ничего не мешает сделать подобное преобразование вручную.

Или использовать готовые стандартный функционал:

C++
1
std::string text = std::to_string(value);
C++
1
2
3
4
std::stringstream ss;
ss<< value;
std::string text;
ss >> text;
0
81 / 40 / 22
Регистрация: 03.05.2013
Сообщений: 722
29.01.2015, 17:57  [ТС]
У меня проблема оказалась из float в char
C++
1
2
3
4
5
6
inline char* float_to_char(float *a) 
{
        char * array = new char[64];
        sprintf(array,"%.10f", *a);
        return array;
}
Не могли бы вы привести пример, с классом std.

Тут на форуме нашёл
C++
1
2
3
char* _ecvt(double value, int count, int* dec, int* sign);
char* _fcvt(double value, int count, int* dec, int* sign);
char* _gcvt(double value, int digits, char* buffer);
То ли это?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
29.01.2015, 18:09
Цитата Сообщение от zasadadada Посмотреть сообщение
Не могли бы вы привести пример, с классом std.
http://rextester.com/NPN70547

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Title of this code
//Compiler Version 18.00.21005.1 for x86
 
#include <string>
#include <iostream>
using namespace std;
 
 
inline std::string float_to_char(const float value) 
{
    return std::to_string(value);
}
 
int main()
{
    std::cout << "Hello, world!\n";
    std::cout << "value = "<< float_to_char(0.12)<<'\n';
}
0
81 / 40 / 22
Регистрация: 03.05.2013
Сообщений: 722
29.01.2015, 18:50  [ТС]
Спасибо, замечательно, но у меня почему то программа начала падать
C++
1
2
3
4
5
                    std::string abc = float_to_char(0.1234);    
                    char* p = new char[abc.length() + 1];
                    strcpy(p, abc.c_str());
                                       ............................
                    delete[] p;
]
Не могу понять в чём дело?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
29.01.2015, 20:19
Лучший ответ Сообщение было отмечено zasadadada как решение

Решение

http://rextester.com/YGA48688

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <string>
#include <iostream>
#include <cstring>
using namespace std;
 
 
inline std::string float_to_char(const float value) 
{
    return std::to_string(value);
}
 
int main()
{
    std::cout << "Hello, world!\n";
    std::cout << "value = "<< float_to_char(0.12)<<'\n';
    
    
    std::string abc = float_to_char(0.1234);    
    char* p = new char[abc.length() + 1];
    strcpy(p, abc.c_str());
 
    std::cout << "value = "<< p <<'\n';
    
    delete[] p;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.01.2015, 20:19
Помогаю со студенческими работами здесь

char[] в int, float.
Интересует такой вопрос: Допустим у меня есть массив из char, и в этом массиве посимвольно лежат цифры (через %s), т.е: char ach;...

Конвертировать float в *char???
Как преобразовать float в *char?

Float в char с форматированием
Всем снова привет, опять никак не пойму - постоянно ругается на типы данных.. float _val = 1.12 - надо вывести как .12 - char {'.',...

Преобразование char[256] в char*
Как преобразовать char в char*?

Float к char* без format и тп
Здравствуйте. Как можно обычными алгоритмами преобразовать float к char*? PS. format и прочие стандартные функции знаю. Интересна...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
ПЛИС
zxcha1ka_ 27.01.2026
AHDL Разработать программы для синтеза следующих устройств: 1. Параллельного регистра 4-х разрядного с синхронной загрузкой и асинхронным сбросом (обнулением); Пoмoгитe пoжaлyйстa
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru