2015-09-20 2 views
0

Как округлить число с плавающей запятой в C/C++, чтобы напечатать ровно две цифры после округления десятичной точки до ближайшей десятичной точки? скажем, например, когда я использую,Круглая плавающая точка: напечатайте ровно две цифры после округления десятичной точки до ближайшей десятичной точки.

printf("%.2f", 12.555); 
cout<<fixed<<setprecision(2)<<12.555<<endl; 

я,

12.55 
12.55 

, но мне нужно вывод, как,

12.56 
12.56 
+0

см. [Округление-до-2-decimal-places-in-c] (http://stackoverflow.com/questions/1343890/rounding-number-to-2-decimal-places-in-c) – amdixon

+0

@amdixon: Не отвечает на вопрос. – gnasher729

+0

Ответ Дэйла Хагглунда в этом сообщении дает решение использовать округление в сочетании с умножением на порядок в 10 секунд (в соответствии с вашим количеством знаков после запятой) – amdixon

ответ

1

C или C++ не волнует то, что вам нужно ,

12.555 is не двоичный номер с плавающей запятой. Двоичные числа с плавающей запятой - это целые числа, умноженные или разделенные степенью двух. 12.555 не такое число. Поэтому, когда вы пишете 12.555, тогда вы получаете число с плавающей запятой, ближайшее к 12.555. Который может быть меньше или больше 12.555 и будет правильно округлен до 12.55 или правильно округлен до 12.56.

Рассчитать x * 1000 и круглый (x * 1000), что даст 12555. Если x * 1000 очень близко к раунду (x * 1000), а последняя цифра раунда (x * 1000) нечетна, это на 1. Разделить на 10, вокруг снова, разделите на 100.

4

проблема в том, что фактическое двойное значение 12.555 является

12.55499999999999971578290569595992565155029296875000 

поэтому, когда вы округлить до 2 знаков после запятой она округляет до 12,55. Ты действительно ничего не можешь с этим поделать.

Смежные вопросы