Итак, я работаю над проектом C ++. У меня есть переменная типа long double и ей присвоено значение типа «1.02»
Затем я пытаюсь использовать cout, чтобы напечатать его, и результат: -0
Я уже пытался использовать setprecision, и все, что я нашел, — это поиск проблемы.
Какое решение для этого?
Пример кода:
#include <cstdlib>
#include <iomanip>
using namespace std;
int main(int argc, char** argv)
{
cout.precision(15);
long double var = 1.2;
cout << var << endl;
return 0;
}
ОС: Windows 8.1 64 бит
Компилятор: minGW
IDE: NetBeans 8.0.2
Кажется, проблема с компилятором. Посмотрите здесь: http://mingw.5.n7.nabble.com/Strange-behaviour-of-gcc-4-8-1-with-long-double-td32949.html
использование printf
или преобразовать значение вашей переменной в double
прежде чем перейти к cout
, (Кстати, вам нужна 80-битная точность?)
Это более простой способ, но ваша программа работала на моем компиляторе.
#include <cstdlib>
#include <iomanip>
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
std::setprecision(10);
long double var = 1.023563457578;
cout << var << endl;
return 0;
}
Я надеюсь, что это поможет вам увидеть, что ваш компилятор может действительно иметь проблемы.
Источник -> Ссылка на сайт
Я не вижу ничего плохого в коде. Я просто поместил его в стандартный формат, и он работает. Вот код, предполагающий, что вы разместили все.
#include <iostream>
using namespace std;
int main(){
long double var = 1.0202;
cout.precision(5);
cout << var << endl;
}
Надеюсь, это ответит на ваш вопрос.
Редактировать:
Постскриптум Короче, тем лучше, поэтому у меня есть лучшее решение (самоуверенное).
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
long double var = 1.0202;
//cout.precision(5);
cout << setprecision(5) << var << endl;
}
Я думаю, что этот лучше, так как он короче. Я также рекомендовал бы использовать printf, если вы выполняете более сложные десятичные операции, так как printf может выбирать, какие переменные (если у вас есть несколько) имеют десятичные дроби или сколько.
Я только что понял проблему .. Это было включение cstdlib вместо iostream.