Двойное умножение дает округленные результаты - PullRequest
4 голосов
/ 08 ноября 2010
double a = 2451550;
double b = .407864;
double c= a*b;
cout<<c;

Я ожидал, что результаты будут 999898,9892, но получу 999899Мне нужен фактический необоснованный результат. Пожалуйста, предложите.

Ответы [ 3 ]

13 голосов
/ 08 ноября 2010

По умолчанию iostreams выдает 6 цифр точности.Если вы хотите больше, вы должны попросить об этом:

std::cout.precision(15);
1 голос
/ 08 ноября 2010

Это также можно сделать, используя прецизионную настройку манипулятора, как показано ниже.

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
 double a = 2451550;
 double b = .407864;
 double c= a*b;
 cout<<setprecision(15)<<c;
}

Кроме того, использование манипулятора сделает код компактным.

0 голосов
/ 03 января 2011

По умолчанию точность std :: iostream будет показывать, сколько цифр всего для отображения, а точность по умолчанию равна 6. Итак, поскольку ваш номер состоит из шести цифр до , знак после запятой не будет отображаться после десятичного числа.

Вы можете изменить это поведение с помощью фиксированного манипулятора. «точность» затем изменяется на количество цифр, отображаемых после десятичной дроби, которая, вероятно, соответствует ожидаемому.

Чтобы всегда получать четыре цифры после десятичной дроби, вы можете сделать это:

cout << setprecision(4) << fixed << c;

Однако имейте в виду, что это будет всегда отображать четыре цифры после десятичной дроби, даже если они являются нулями. Нет простого способа получить «точность», означающую самое большее x количество цифр после десятичного знака с помощью std :: iostreams.

...