output — Как отобразить фиксированное количество цифр в C ++ без округления

У меня есть этот код (очень простой):

#include <iostream>
#include <iomanip>

using namespace std;
int main()
{
float   a = 0.0,
b = 0.0,
c = 0.0;

cout<<"Input a: ";
cin>>a;
cout<<"input b: ";
cin>>b;
cout<<endl;
c = a / b;

cout<<"Result: "<<fixed<<setprecision(2)<<c<<endl;
return 0;
}

Когда я ввожу два числа (скажем, a = 513 и b = 791), я получаю 0,65. Калькулятор показывает, что правильный ответ — 0,648. Я понимаю, что мой код округляет последнее десятичное число, но это не то, что я хочу.

Как я могу получить его там, где он остается 0,64, а не 0,65?

5

Решение

Если вы хотите обрезать значение до двух десятичных разрядов, вы можете умножить его на 100, обрезать до целого числа, а затем разделить на 100, например так:

c = a / b;
c = floor(100 * c) / 100;
cout<<"Result: "<<fixed<<setprecision(2)<<c<<endl;

Демо на Ideone.

9

Другие решения

Ты можешь использовать trunc усечь до определенного количества цифр:

c = a / b;

// truncate past two decimals:
c = trunc(c * 100) / 100;

cout<<"Result: "<<fixed<<setprecision(2)<<c<<endl;

из для универсальной функции:

int trunc(double val, int digits)
{
double pow10 = pow(10,digits);
return trunc(val * pow10) / pow10;
}

затем используйте

cout << "Result: " << fixed << setprecision(2) << trunc(c,2) << endl;
2

По вопросам рекламы [email protected]