#c
#c
Вопрос:
#include<iomanip>
#include <iostream>
using namespace std;
int main()
{
double b = 1.9876543212987 ;
cout<<"double: "<<setprecision(12)<<b<<endl;
}
Это код, и вывод: double: 1.9876543213 В конце должно быть 3212. Почему это происходит с определенными числами, а не с другими.
Если я установлю значение b double b = 3.91234823929;
с той же точностью, это даст мне правильное значение. Нужна помощь от профессионалов c .
Комментарии:
1. Похоже, что оно округляется до ближайшей значащей цифры.
2. Почему это должно быть
3212
в конце? следующая цифра9
и, поскольку она больше5
, вы округляете2
до a3
.3. Также смотрите Примеры здесь en.cppreference.com/w/cpp/io/manip/setprecision Конкретика
std::setprecision(10)
иmax precision:
результаты4. Я понял часть округления, но я не понимаю, почему это всего лишь 11 цифр, когда я установил точность равной 12? Спасибо за ответы, кстати, не ожидал, что это будет так быстро.
5. Также есть ли способ остановить округление цифр?
Ответ №1:
1.9876543212987
до двенадцати знаков после запятой 1.987654321230
. Затем завершающий ноль отбрасывается, так что вы получаете 1.98765432123
. Это объясняет, почему вы получаете только 11 знаков после запятой.
Нет простого способа остановить округление цифр. В конце концов, самое близкое возможное значение — это то, чего хочет большинство людей. Кажется, что вам нужно сделать, это записать выходные данные в строку с максимальной точностью, а затем выполнить некоторые строковые манипуляции с последними цифрами. Таким образом, вы можете оставить конечные нули, обрезать вместо округления и т.д.