двойное умножение округляется, и я не знаю, как это исправить

0

Мой код округляет мои двойные значения, я умножаю два удвоения и отбрасывая его на целочисленное значение. может кто-то помочь?

cout << "This program will determine the water needs for "
        "a refugee camp based on the number of refugees, "
        "daily water needs, and the existing water supplies."
        << endl
        << "Please enter the number of refugees: " << endl;

double NumOfRefugees = 0;
cin >> NumOfRefugees;

cout << "Please enter the daily water needs for each person "
        "(in the range 7.5 to 15.0 liters per day.): " << endl;

double DailyNeedsPerPerson = 0;
cin >> DailyNeedsPerPerson;

if (DailyNeedsPerPerson < 7.5 || DailyNeedsPerPerson > 15.0)
{
    cout << "The entered value is not within a reasonable range as specified in "
            "the Sphere Project Humanitarian Charter. The program will now end.";
    return 1;
}

double TotalDailyDemand = NumOfRefugees * DailyNeedsPerPerson;

cout << "The total demand is " << TotalDailyDemand << endl;

Например, когда я ввожу 15934 и 9.25, мои кодовые выходы:

This program will determine the water needs for a refugee camp based on the number of refugees, daily water needs, and the existing water supplies.
Please enter the number of refugees: 
15934
Please enter the daily water needs for each person (in the range 7.5 to 15.0 liters per day.): 
9.25
147390
The total demand is 147390

Пожалуйста помоги!

Теги:

1 ответ

4
Лучший ответ

То, что вы видите, является результатом точности по умолчанию выходного потока, состоящего из 6 цифр.

Таким образом, вам нужно применить некоторое форматирование к выходному потоку, чтобы иметь возможность видеть больше, чем 6 цифр по умолчанию. Например:

#include <iostream>

int main()
{
    double x = 15934.0;
    double y = 9.25;
    double z = x*y;

    std::cout.setf(std::ios_base::fixed, std::ios_base::floatfield);
    std::cout.precision(2);
    std::cout << z;
}

Вывод

147389.50

Вызов setf используется для указания фиксированного форматирования с плавающей запятой с указанным числом цифр после десятичной точки. Вызов precision указывает, сколько цифр после десятичной точки.

Я не уверен, какое форматирование вы действительно хотите, потому что не сказали. Но эти функции и родственники должны позволить вам получить результат, который вы желаете.

  • 0
    большое спасибо :) это очень помогло

Ещё вопросы

Сообщество Overcoder
Наверх
Меню