У меня есть следующая проблема:
double a = 6.005; double b = 5.995;
Я хочу установить точность удвоения 2 цифры после точки, например
double c = a+b;// I would like to get 11.99 not 12.00
.
Как я могу это сделать?
У меня есть следующая проблема:
double a = 6.005; double b = 5.995;
Я хочу установить точность удвоения 2 цифры после точки, например
double c = a+b;// I would like to get 11.99 not 12.00
.
Как я могу это сделать?
Точность — это одно; округленное для отображения совсем другое.
Я думаю, что это неправильное направление. Вы должны хотеть получить всю возможную точность и беспокоиться об округлении для отображения, когда результаты будут завершены.
ОБНОВИТЬ:
Вы не должны представлять валюту, используя двойные числа. В прошлый раз, когда я смотрел, C++ был объектно-ориентированным языком. Вы должны создать абстракцию для Money, которая делает правильные вещи и абстрагирует эти детали от клиентов класса.
Вы можете создать класс Money, который управляет частным представлением валюты в виде центов, если вы работаете в долларах. Делайте все свои расчеты, используя целые числа, и визуализируйте в конце.
Я хочу установить точность удвоения 2 цифры после точки
Просто умножьте на 100 и используйте целые числа.
Вероятно, вам следует использовать числа с фиксированной точкой:
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; }
Нет, вам нужно либо настроить все значения по одному (mul на 100, принять часть int, div на 100), либо вам нужно написать свой собственный класс MySpecialDouble (который делает то же самое только за сценой).
a*b
.double
, конечно, является типом с плавающей запятой, и ваша точка не плавает. - person MSalters   schedule 29.07.2011a = 6.005 -> 6.00
и тому подобное? - person Dilettant   schedule 29.07.2011