как можно округлить до второй десятичной точки в C++. Спасибо за помощь.Округление ко второму знаку после запятой
ответ
Вы можете умножить на 100, а затем округлить до целого числа. Затем поместите десятичную точку после первых двух цифр.
Например:
void round(double x)
{
double y = 100 * x;
int rounded = (int)(y + 0.5);
printf("%lf rounded = %d.%02d\n", x, rounded/100, rounded % 100);
}
Обратите внимание, что это все равно будет страдать от ошибок точности IEEE 754, поэтому такие вещи обычно остаются до выхода. –
Нет, этот бит не будет. Краевой кейс для округления равен 0,5, что прекрасно представляется в виде двоичной фракции. То есть номера до 'xxxx.01111111111111111' округляются до' xxxx', а числа из 'xxxx.10000000000000000' up округляются до' xxxx + 1'. (если вы _already_ страдали от ошибок точности IEEE754, это может быть удивительно. Например, если вы считаете, что 'y' содержит' 0.145' - он не может.) – MSalters
Заканчивать round() for float in C++, который говорит о том, округляя поплавки хотя и не в 2 местах. Те же основные методы должны работать.
Если вы ожидаете точного результата в double
или float
, это может быть невозможно. Многие числа, которые могут быть точно представлены в двух десятичных цифрах, не могут быть представлены в базовых 2 числах с плавающей запятой вообще, и все, что вы получите, является ближайшим эквивалентом. Например, вы можете обнаружить, что 1.10
застрял в 1.1000000000000001
независимо от того, сколько раз вы пытаетесь его округлить.
Вы не указали, какое округление вам нужно. Предполагая, что округление до ближайшего целого числа:
#include <math.h>
#include <stdio.h>
double round(double x) { return floor(x * 100 + 0.5)/100; }
int main()
{
printf("%g\n", round(12.345));
}
Он печатает 12,35.
Или если вы просто хотите, чтобы напечатать число, округленное до двух знаков после запятой:
printf("%.2f\n", x);
При печати двойников можно указать точность:
F, F
Двойной аргумент округляется и преобразуется в десятичную нотацию в стиле [-] ddd.ddd, где число цифр после десятичного знака равно спецификации точности. Если точность отсутствует, она принимается равной 6; если точность явно равна нулю, символ десятичной точки не появляется. Если появляется десятичная точка, перед ней появляется как минимум одна цифра.
Try:
printf("%f rounded = %.2f\n", x, x);
То же самое в C++
std::cout << x << " rounded = " << std::setprecision(2) << x << "\n";
Curios, почему кто-то думает, что это неправильно? –
Фактически это не округляет 'x', хотя оно выводит округленное представление' x' (не my downvote btw) – MSalters
Мой аргумент заключается в том, что в вопросе не указано, что он хочет округлить (представление переменной или выход значения). Попытка округлить значение с плавающей запятой обречена на провал (из-за проблем округления). Другая интерпретация заключается в том, что ОП хочет иметь десятичное значение. –
- 1. круглого значения PHP десятичного ко второму знаку после последнего 0
- 2. Округление десятичных знаков до двух знаков после запятой в C#
- 3. Impala округление до 10 знаков после запятой
- 4. Округление до двух знаков после запятой
- 5. Округление до одной знака после запятой SSRS
- 6. Sass/SCSS - округление вниз знаков после запятой
- 7. ява округление до двух знаков после запятой
- 8. Java Округление до 15 знаков после запятой
- 9. SQL - округление до 2 знаков после запятой
- 10. Округление поплавка до двух знаков после запятой
- 11. Округление до 2 знаков после запятой C#
- 12. Округление на переменное число знаков после запятой
- 13. (vb.net) округление до 2 знаков после запятой
- 14. Округление до 2 знаков после запятой
- 15. Округление до второго знака после запятой
- 16. Вернитесь ко второму циклу foreach
- 17. Python string.format() в процентах к одному знаку после запятой
- 18. Округление с плавающей запятой
- 19. Align элемент ко второму столбцу
- 20. Невозможно добавить ко второму контейнеру
- 21. Передача ManagedObjectContext ко второму представлению
- 22. Округление значений с плавающей запятой
- 23. Python с плавающей запятой Округление
- 24. Калькулятор класса не подходит ко второму ученику
- 25. Округление до 2 знаков после запятой, но сохранение 4 знаков после запятой в C#
- 26. Java, округление от двух до двух знаков после запятой
- 27. AWK - округление до 2 знаков после запятой в подытогами
- 28. Округление чисел до 2 цифр после запятой в оракуле
- 29. Округление в Javascript до 2 знаков после запятой
- 30. Преобразование в десятичное и округление до двух знаков после запятой
вам нужно округлить для дальнейшей математике или просто печатать ли? –