Почему, когда я ввожу обозначение с фиксированной точкой, мой вывод равен 0,00?

Я хочу добавить в свою программу нотацию с фиксированной точкой, но когда я это делаю, конечный результат всегда равен 0,00.

Я пытался поставить это

cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);

в разных частях программы, но ничего не меняется.

Вот моя программа:

#include <iostream>
#include <cmath>

using namespace std;

void get_input(double& body1, double& body2, double& distance);
void get_output(double m1, double m2, double d);
double compute_GAF(double m1, double m2, double d); //takes the masses of two bodies and the distance and computes gravitational attractive force between them
const double G = 6.673 * (1/pow(10, 11)); //global constant for Gravity

int main()
{
    double m1, m2, d;
    char ans;

    do
    {

        cout << "Thanks for using the Gravitational Attractive Force Calculator\n";
        cout << endl;

        get_input(m1, m2, d);

        get_output(m1, m2, d);


        cout << "Do you want to calculate again? (Y/N)" << endl;
        cin >> ans;
        cout << endl;

    } while (ans == 'y' || ans == 'Y');

    return 0;
}

void get_input(double& body1, double& body2, double& distance)
{
    using namespace std;

    cout << "Enter the mass of the two objects with a space in between:\n";
    cin >> body1 >> body2;
    cout << "Enter the distance between the objects:\n";
    cin >> distance;
    cout << endl;

    return;
}

void get_output(double m1, double m2, double d)
{
    using namespace std;
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);

    cout << "The Gravitational Attractive Force of the two objects is " << compute_GAF(m1, m2, d);

    if (compute_GAF(m1, m2, d) == 1)
        cout << " dyne.\n";
    else
        cout << " dynes.\n";
    cout << endl;
    return;
}

double compute_GAF(double m1, double m2, double d)
{
    double F;

    F = (G*m1*m2) / pow(d, 2);

    return F;
}

Извините за мой плохой английский и мои плохие навыки программирования.


person emanuel1337    schedule 20.10.2013    source источник
comment
Проверьте свои входы и их единицы. Мои тесты давали числа, но они были слишком малы, поэтому всегда отображались как 0,00 с требуемой точностью.   -  person andy mcevoy    schedule 21.10.2013
comment
@andymcevoy Да! Ты прав. Я решил это, спасибо!   -  person emanuel1337    schedule 21.10.2013


Ответы (1)


Вероятно, вы устанавливаете слишком низкую точность для вычисляемого числа (т. е. вам нужно больше знаков после запятой).

Например, вместо этого попробуйте cout.precision(20);.

Кроме того, вам не нужны эти операторы using namespace std; внутри ваших тел функций. Одного раза наверху будет достаточно.

person Chris Olsen    schedule 20.10.2013
comment
Спасибо! Проблема заключалась в том, что результат всех моих проверенных вводов был 0,00000000000‹и что-то› - person emanuel1337; 21.10.2013