Могу ли я преобразовать строку в число с плавающей запятой с минимальным значением точности десятичной точки?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++»