Мне нужна помощь по поддержанию точности double
. Если я присваиваю литерал двойному, фактическое значение было усечено.Как «вывести» правильное количество десятичных знаков двойного значения?
int main() {
double x = 7.40200133400;
std::cout << x << "\n";
}
Для приведенного выше фрагмента кода, выход был 7.402
Есть ли способ, чтобы предотвратить этот тип усечения? Или есть способ точно рассчитать, сколько плавающих точек для double
? Например, number_of_decimal(x)
даст 11, так как вход неизвестен во время выполнения, поэтому я не могу использовать setprecision()
.
Я думаю, что я должен изменить свой вопрос: Как преобразовать двойной в строку без усечения плавающей точки. т.е.
#include <iostream>
#include <string>
#include <sstream>
template<typename T>
std::string type_to_string(T data) {
std::ostringstream o;
o << data;
return o.str();
}
int main() {
double x = 7.40200;
std::cout << type_to_string(x) << "\n";
}
Ожидаемый выход должен быть 7.40200, но фактический результат был 7.402. Итак, как я могу обойти эту проблему? Есть идеи?
«Ожидаемый результат» - проблема с вашими ожиданиями. «7.40200, но фактический результат был 7.402» - они равны, поэтому ничего не было «усечено». cout не может знать, сколько нулей вы ввели в ваш исходный файл. –
См. [This] (http://www.cplusplus.com/reference/iostream/ios_base/precision/) для точности с плавающей точкой. – Benoit