SuperMiQi Ответов: 2

Как преобразовать строку в float и избежать проблемы точности в C++


Привет,

У меня есть следующая проблема в c++.

std::string num = "0.6";
float temp = ::strtof(num.c_str(), nullptr);

Выход:
0.600000024


std::string num = ""2999.6";
float temp = ::strtof(num.c_str(), nullptr);

Выход:
2999.60010


Как избежать этой проблемы точности ?

Что я уже пробовал:

Я пробовал использовать sscanf_s
float myAtof(string& num) 
{
	floattmp;
	sscanf_s(num.c_str(), "%f", &tmp);
	return tmp;
}

float myround(float var)
{
	float value = (int)(var * 100 + .5);
	return (float)value / 100;

}


Но это не дает ожидаемого результата как 0,6 так и 2999,6

Не мог бы кто-нибудь объяснить мне, как правильно преобразовать значение.
Заранее спасибо.

Richard MacCutchan

Как говорит OriginalGriff ниже, значения были преобразованы. Вам нужно установить точность отображения при их печати.

2 Ответов

Рейтинг:
0

OriginalGriff

Краткая версия: поскольку компьютеры не хранят значения в десятичной системе счисления, они используют базу 2. А это означает, что числа, которые выглядят простыми в базе 10, не могут быть точно представлены в виде значений с плавающей запятой.

Длинная версия: 4.8 — числа с плавающей запятой | Learn C++[^]


SuperMiQi

Привет,

Спасибо за ваш ответ.