У меня нет большого опыта работы с C++, у меня есть следующая проблема. С помощью следующего кода:Как назначить точное содержимое строки для double в C++
double d = 0.0000000;
stringstream ss;
ss << std::fixed << std::setprecision(2) << d;
ss >> d;
или
std::string content = ss.str();
d = atof(content.c_str() );
любой из этих двух способов, в то время отладки в MS Visual Studio, я вижу значение D является 0.0000000
не 0.00
, как в строке content
Как получить точное содержимое строки, назначенной двойному d?
Может быть, я должен задать более широкий вопрос:
Я пишу метод, который возвращает двойной с точностью по мере необходимости. Например, если у меня есть 2.446343434 как значение d, а точность равна 2, как я могу получить мой метод return d как 2.45?
После прочтения нижеследующих ответов: Я узнал, что это невозможно сделать. Итак, следующий вопрос:
Даже если мой выше код пытается поставить 2.45 в double, среда выполнения C++ добавит нули (сколько?) До 2.45 и вернется вправо? Есть ли способ контролировать добавление нулей в double?
Вы не можете этого сделать, потому что точность 'double' фиксируется компилятором, а' double' имеет ошибки с плавающей запятой. Используйте строку для хранения точного содержимого строки. – MikeCAT
Я не уверен, что ошибки с плавающей запятой имеют к этому какое-то отношение. Как и в случае с реальными числами, нет разницы между 0, 0.00 или 0.0000000 с числами с плавающей запятой. (хотя, в отличие от действительных чисел, существует различие между 0 и -0). –
В чем проблема? Почему вы хотите контролировать точность, которую использует отладчик Visual Studio для отображения значения типа 'double'? –