C ++ двойная точность и округление - PullRequest
1 голос
/ 29 июля 2011

У меня следующая проблема:

double a = 6.005; double b = 5.995;

Я хочу установить точность двойных 2 цифр после точки, например

double c = a+b;// I would like to get 11.99 not 12.00.

Как я могу это сделать?

Ответы [ 4 ]

11 голосов
/ 29 июля 2011

Точность - это одно; Округление для отображения совсем другое.

Я думаю, что это неправильно. Вы должны стремиться к максимальной точности и беспокоиться о округлении для отображения после получения результатов.

ОБНОВЛЕНИЕ:

Вы не должны представлять валюту с помощью двойных символов. В прошлый раз, когда я смотрел, C ++ был объектно-ориентированным языком. Вы должны создать абстракцию для денег, которая делает правильные вещи и абстрагирует эти детали от клиентов класса.

Вы можете создать класс Money, который будет управлять частным представлением валюты в центах, если вы работаете в долларах. Все расчеты выполняйте с помощью целых чисел и отрисовывайте в конце.

9 голосов
/ 29 июля 2011

Я хочу установить точность двойных 2 цифр после точки

Просто умножьте на 100 и используйте целые числа.

3 голосов
/ 29 июля 2011

Возможно, вам следует использовать фиксированную точку числа:

unsigned int a = 600;
unsigned int b = 599;

unsigned int c = a + b;

unsigned int make_fixed(double d) { return d * 100; }

void print_fixed(unsigned int n) { std::cout << n/100 << "." << n%100; }
1 голос
/ 29 июля 2011

Нет, вам нужно либо корректировать все значения по одному (муль на 100, принять int, делить на 100), либо вам нужно написать свой собственный класс MySpecialDouble (который делает то же самое прямо за сценой).

...