Ограничение цифр от десятичной точки в С++
Я новичок в С++. У меня есть двойная переменная 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;