Как "отсечь" правильное количество десятичных разрядов в двойном значении?

Мне нужна помощь в сохранении точности double . Если я назначу литералу 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. Итак, как я могу обойти эту проблему? Есть идеи?

27
задан iammilind 8 May 2015 в 14:26
поделиться