Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
7 / 0 / 0
Регистрация: 21.11.2022
Сообщений: 78

Запись значений переменных с типом float и double в виде строки

19.03.2023, 21:13. Показов 5352. Ответов 63
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно реализовать запись чисел с плавающей точкой в виде строки? В функцию должна передаваться переменная с типом float или double и записываться в строку. Перепробовал уже много способов, но все они требуют умножения или деления этого числа, вследствие чего теряется точность, в интернете про это тоже ничего особо не написано. Также нельзя использовать функции, которые бы это делали.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.03.2023, 21:13
Ответы с готовыми решениями:

Диапазон значений float, double и long double (и не только)
нужно вычислить диапазон значений всех типов. я так понял, у этих трех результат должен быть в экспоненциальном виде, но я не знаю и не...

Сравнение двух переменных с типом double
Здравствуйте, у меня была проблема с тем, что QVector полностью не заполнялся, в результате чего, на графике появлялась лишняя точка (0;0)....

Диапазон значений типов float, double
Добрый день! Объясните, пожалуйста, почему диапазон значений типа float (язык Си) от 3.4E–38 до 3.4E38. В то время как float описывается...

63
7 / 0 / 0
Регистрация: 21.11.2022
Сообщений: 78
20.03.2023, 13:35  [ТС]
Студворк — интернет-сервис помощи студентам
У меня получилось добиться идентичных значений, теперь эта функция все корректно отображает и может записывать неограниченное количество знаков.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void dtoe(double number, char* storage, char* str, int accuracy, int upp_or_low) {
    int cell = 0, power = 0, ipart = number;
    double dpart = number - ipart;
    for (; ipart / 10 != 0; ++power, ++cell) {
        *++storage = ipart % 10 + '0';
        ipart /= 10;
    }
    *++storage = '.';
    *++storage = ipart / 1 + '0';
    cell += 2;
    for (; cell != 0; --cell) {
        *str++ = *storage--;
    }
    for (; accuracy != 0; --accuracy) {
        dpart *= 10;
        *str++ = dpart / 1 + '0';
        for (; dpart > 0.999999999; --dpart)
            ;
    }
}
Миниатюры
Запись значений переменных с типом float и double в виде строки  
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,369
20.03.2023, 13:45
Молодец Ваня...
0
7 / 0 / 0
Регистрация: 21.11.2022
Сообщений: 78
20.03.2023, 13:49  [ТС]
Спасибо вам за помощь)
0
Нарушитель
10897 / 5831 / 1289
Регистрация: 12.03.2015
Сообщений: 26,909
20.03.2023, 13:52
Цитата Сообщение от ExtraCheese Посмотреть сообщение
чтобы можно было указывать неограниченное количество знаков
Нахрена? У типов с плавающей точкой конечная точность. Если выводить в виде строки 100500 цифр после точки, то они будут неверными.
1
7 / 0 / 0
Регистрация: 21.11.2022
Сообщений: 78
20.03.2023, 13:54  [ТС]
Если в оригинальной sprintf() есть такая возможность, то я ее тоже должен реализовать.
0
Нарушитель
10897 / 5831 / 1289
Регистрация: 12.03.2015
Сообщений: 26,909
20.03.2023, 13:56
Цитата Сообщение от ExtraCheese Посмотреть сообщение
Если в оригинальной sprintf() есть такая возможность, то я ее тоже должен реализовать.
sprintf() тоже будет врать, если у неё запросить много знаков после точки. Для double больше 18 цифр показывать нет никакого смысла.
0
7 / 0 / 0
Регистрация: 21.11.2022
Сообщений: 78
20.03.2023, 14:02  [ТС]
Да это я понимаю, что если выводить много знаков после запятой, то данные будут неверными, просто в моей версии sprintf() нужно учесть особенности оригинала.
0
Модератор
 Аватар для Curry
5171 / 3537 / 536
Регистрация: 01.06.2013
Сообщений: 7,697
Записей в блоге: 9
20.03.2023, 14:11
Цитата Сообщение от ExtraCheese Посмотреть сообщение
*++storage = ipart / 1 + '0';
Цитата Сообщение от ExtraCheese Посмотреть сообщение
*str++ = dpart / 1 + '0';
Нужно было подождать выкладывать код до 1 апреля.
Цитата Сообщение от ExtraCheese Посмотреть сообщение
for (; dpart > 0.999999999; --dpart)
Кол-во знаков ограничено, однако, прогресс на лицо, в прошлом варианте было меньше девяток.
1
Нарушитель
10897 / 5831 / 1289
Регистрация: 12.03.2015
Сообщений: 26,909
20.03.2023, 14:25
Цитата Сообщение от ExtraCheese Посмотреть сообщение
Да это я понимаю, что если выводить много знаков после запятой, то данные будут неверными, просто в моей версии sprintf() нужно учесть особенности оригинала.
Хоть кол на голове теши.
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,369
20.03.2023, 15:14
ExtraCheese,
Может я дурак, но ваш код, это куча мусора...
Картинка красивая на чёрном фоне....
0
7 / 0 / 0
Регистрация: 21.11.2022
Сообщений: 78
20.03.2023, 15:45  [ТС]
Я все понимаю, что у меня неграмотно написан код, только 2 месяца назад начал обучаться. Но все-таки какие ошибки я допустил и что нужно изменить, чтобы это выглядело лучше?
0
Нарушитель
10897 / 5831 / 1289
Регистрация: 12.03.2015
Сообщений: 26,909
20.03.2023, 15:46
Цитата Сообщение от ExtraCheese Посмотреть сообщение
Но все-таки какие ошибки я допустил и что нужно изменить, чтобы это выглядело лучше?
Матчасть учи. Читай про то, как представлены числа с плавающей точкой в двоичном виде в памяти конпуктера. Тогда поймёшь.
0
7 / 0 / 0
Регистрация: 21.11.2022
Сообщений: 78
20.03.2023, 15:48  [ТС]
То есть мне нужно было работать с этим числом в двоичном виде?
0
Нарушитель
10897 / 5831 / 1289
Регистрация: 12.03.2015
Сообщений: 26,909
20.03.2023, 15:52
Цитата Сообщение от ExtraCheese Посмотреть сообщение
То есть мне нужно было работать с этим числом в двоичном виде?
Я тебе щас открою одну страшную военную тайну! Только тсссссссссссссссссссссссс, никому не говори!!!
Короче, все числа и прочие данные: строки, массивы, фотки, игрухи и порнухи - ВСЁ хранится, передаётся и обрабатывается только в двоичном виде. Запомни это. А лучше - запиши.
0
7 / 0 / 0
Регистрация: 21.11.2022
Сообщений: 78
20.03.2023, 16:01  [ТС]
Я имел ввиду побитовые операции, а не то, что и в каком виде хранится на компьютере.
0
 Аватар для CoderHuligan
1754 / 1020 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
20.03.2023, 16:02
Советую: http://we.easyelectronics.ru/S... chkoy.html
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
20.03.2023, 18:20
Цитата Сообщение от Verevkin Посмотреть сообщение
sprintf() тоже будет врать, если у неё запросить много знаков после точки. Для double больше 18 цифр показывать нет никакого смысла.
Что значит "нет смысла"? Если вы делаете вычисления, которые учитывают тот факт, что на вашей платформе плавающие типы представлены в двоичном формате, то вас запросто может интересовать полная точность записанного в double представления.

Я, например, хочу знать, сколько будет 2152. Или 2-152. Тип double представит эти числа совершенно точно. И это намного больше 18 цифр.
0
Нарушитель
10897 / 5831 / 1289
Регистрация: 12.03.2015
Сообщений: 26,909
20.03.2023, 18:26
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Я, например, хочу знать, сколько будет 2152. Или 12.5-152. Тип double представит эти числа совершенно точно. И это намного больше 18 цифр.
Это частный случай. 12.7-152 желаешь узнать? Почему нет?

Добавлено через 3 минуты
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Я, например, хочу знать, сколько будет 2152. Или 12.5-152.
Кстати, скока получится-то? Я имею в виду в десятичном виде. Интересно жэж.
0
7 / 0 / 0
Регистрация: 21.11.2022
Сообщений: 78
20.03.2023, 18:36  [ТС]
Как использовать побитовые операторы с числами с плавающей точкой? Компилятор ругается на то, что переменная должна иметь целочисленный тип.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
20.03.2023, 18:36
Цитата Сообщение от Verevkin Посмотреть сообщение
Кстати, скока получится-то? Я имею в виду в десятичном виде. Интересно жэж.
12.5 - неправильный пример. Я когда в гневе, у меня всегда перед глазами огненные цифры 12.5 пылают. Вырвалось...

Вот парочка результатов, которые мне удалось наскрести: http://coliru.stacked-crooked.... 7a5cceb590
Проверено электроникой
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.03.2023, 18:36

Перевод строки в double или float
string cz = "1.1632"; Подскажите как правильно перевести?

Вывод переменных типа char, int, double в виде таблицы
Разработайте приложение для вывода переменных типа char, int, double в виде таблицы. Выведите две таблицы. Значения переменных для ...

Как присвоить из строки значение float/double к переменной?
#import "AppDelegate.h" @implementation AppDelegate NSfloat _R=; @end Так нельзя сделать и на подобии тоже)

Формирование строки из переменных с разным типом данных
Простите новичка за глупые вопросы, но никак не могу решить проблему. a := 0; b := 0; c =: '+'; //В некоторых случаях будет...

Как преобразовать все int,float,double в строки LPWSTR, LPCTSTR
Столкнулся с проблемой не как не переведу в нормальный вид вот код #include <iostream> #include <Windows.h> ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru