Ограничение цифр от десятичной точки в С++

Я новичок в С++. У меня есть двойная переменная double a=0.1239857 Я хочу ограничить переменную a  от десятичной точки две цифры. Таким образом, a будет 0.12. Я знаю, что у С++ есть функции, которые возвращают наибольшее или наименьшее целое число, которое больше или меньше, чем a, как ceil или floor.I есть функция, которая реализует ограничение числа переменных с плавающей запятой? Или Как изменить точность переменной a?

С наилучшими пожеланиями...

Ответ 1

Действительно ли вы пытаетесь округлить число или просто изменить отображаемую точность?

Для первого (обрезание лишних цифр):

double scale = 0.01;  // i.e. round to nearest one-hundreth
value = (int)(value / scale) * scale;

или (округление вверх/вниз, если необходимо, на ответ jheriko)

double scale = 0.01;  // i.e. round to nearest one-hundreth
value = floor(value / scale + 0.5) * scale;

Для последнего:

cout << setprecision(2) << value;

где параметр setprecision() - это максимальное количество цифр, которое должно отображаться после десятичной точки.

Ответ 2

Это приведет к двум цифрам после запятой.

a = floor(a * 100.0) / 100.0;

Ответ 3

Что вы хотите сказать, хотите ограничить переменную? Значение или его форматирование. Для значения вы можете использовать разделение пола+. Что-то вроде:

double a = 0.12123
double b;

b = floor(a * 100) / 100

Ответ 4

Если вы просто хотите вывести значение, вы можете сделать что-то вроде

printf("%.3f", a); // Output value with 3 digits after comma

Если вы хотите преобразовать само значение, вы можете сделать:

a = (int)(a * 1000) / 1000.0f;

Обратите внимание, что оба они не округляют, они просто обрезают значение.

Ответ 5

Используйте ios_base::precision для форматирования ввода/вывода.

Ответ 6

Вы можете установить точность потока, например.

double d = 3.14579;
cout.precision(2);
cout << d << endl;

// Or use a manipulator

#include <iomanip>
cout << setprecision(2) << d << endl;

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

Ответ 7

Фактическое решение округления будет x = floor(100*x + 0.5) / 100;, предполагая, что значение округляется в переменной "x".

x = floor(100*x) / 100;, рекомендованный другими, здесь фактически усекает число до 2dp.

Ответ 8

вы также можете сделать что-то вроде этого:

//This code will ask the user for an input, set the decimal precision to the hundredths place,  and add 4.63 to the inputted variable

int banana;
cin >> banana;
cout << setprecision(2) << fixed << banana + 4.63;