Почему эти функции усекают возвращаемое значение?

Остерегайтесь домашней работы ниже.

Редактирование:

Вытащил бесполезную информацию.

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

Как вернуть не усеченное значение?

float hat(float weight, float height) {
    return (weight/height)*2.9;
}
float jacket(float weight, float height, int age) {
    double result = (height * weight) / 288;
    /*now for every 10 years past 30 add (1/8) to the result*/
    if((age - 30) > 0){
        int temp = (age - 30) / 10;
        result = result + (temp * .125);
        //cout<<"result is: "<<result<<endl;
    }
    return result;
}

float waist(float weight, int age) {
    double result = weight / 5.7;
    /*now for every 2 years past 28 we add (1/10) to the result*/
    if((age - 28) > 0){
        int temp = (age - 28) / 2;
        result = result + (temp * .1);
    }
return result;}

2 ответа

Решение

Задавать fixed:

  // Output data //
  cout << fixed;
  cout << "hat size: " << setprecision(2) << hat(weight, height) << endl;
  cout << "jacket size: " << setprecision(2) << jacket(weight, height, age) << endl;
  cout << "waist size: " << setprecision(2) << waist(weight, age) << endl;
cout << "hat size: " << setprecision(2) << hat(weight, height) << endl;

Вы запутались в том, как работает форматированный вывод iostreams.

В режиме "по умолчанию" для форматирования значений с плавающей запятой (без запроса fixed или же scientific output), точность - это общее количество цифр для печати по обеим сторонам десятичной точки. Подумайте о "значимых цифрах", а не о "количестве дробных цифр".

Для того, что вы пытаетесь сделать, я предлагаю вам использовать "фиксированный" режим или обход вручную, а затем не указывать точность.

Другие вопросы по тегам