Могу ли я преобразовать строку в число с плавающей запятой с минимальным значением точности десятичной точки?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Могу ли я преобразовать строку в число с плавающей запятой с минимальным значением точности десятичной точки?

Сообщение Anonymous »

Я работаю над чем-то, что извлекает число с плавающей запятой из строки. Я заметил, что некоторые значения приводят к немного неточным значениям с плавающей запятой. Некоторые исследования на эту тему подсказали мне либо использовать точную библиотеку с плавающей запятой, возможно, переключиться на более крупный тип данных (double) для более широкого диапазона точности, либо использовать целочисленную математику.
Я бы предпочел не делать ничего из этого (особенно последнего), а вместо этого создать функцию, которая «округляет» число с плавающей точкой до тех пор, пока оно не будет соответствовать строковому представлению. Я проделал базовые математические вычисления и понял, что это действительно произошло (по крайней мере, в моем примере).
В моем примере у меня была строка со значением «0,04». Когда я использую для него std::stof, получается значение 0,0399999991. Минимальная сумма, которую я должен добавить к этому значению с плавающей запятой, чтобы оно соответствовало строке (по крайней мере, до десятичной точки моей строки), составляет 0,0000000019, а затем преобразуется в 0,0400000010. Я понял это, просто добавляя до тех пор, пока не произошел сдвиг.
Мой вопрос: существует ли уже существующий метод такого расчета для всех чисел с плавающей запятой? Если нет, я волнуюсь, что мне придется сделать цикл, чтобы продолжать увеличиваться на 0,0000000001. Однако я не уверен, как я могу программно заключить успех, учитывая, что переключение 0,0399999991 обратно на строку снова приводит к строке «0,04»...

Подробнее здесь: https://stackoverflow.com/questions/791 ... sion-value
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»