Установите цифры после десятичной точки - PullRequest
16 голосов
/ 13 октября 2010

У меня есть число с плавающей точкой, например, 12.12123 Есть ли функция, которая будет отображать только число с 2 цифрами после запятой 12.12?

Вот код:

y1 = ( c1 - (a1 * x)) / b1;
 y2 = ( c2 - a2 * x) / b2;

if (y1 == y2)
  cout << "The same";

, поэтому, если y1 = 1.001 и y2 = 1.002, они не выглядят одинаково.

Я пытался добавить. cout.setf (ios :: fixed, ios :: floatfield); cout.precision (2);

но это, похоже, не помогает.

Ответы [ 7 ]

34 голосов
/ 13 октября 2010
/* The C way */
#include <stdio.h>
...
float f = 12.12123f;
printf("%.2f",f);

// The C++ way
#include <iostream>
...
float f = 12.12123f;
std::cout.setf(std::ios_base::fixed, std::ios_base::floatfield);
std::cout.precision(2);
std::cout << f;

// The alternative C++ way
#include <iostream>
#include <iomanip>
...
float f = 12.12123f;
std::cout << std::fixed << std::setprecision(2) << f;

В C отступ 0 автоматически добавляется вправо, если для печати недостаточно цифр. В примерах C ++ это отключено;чтобы включить это поведение, вы должны включить фиксированный режим в потоке с помощью std::fixed (или включить соответствующие флаги потока с помощью std::ios_base::setf()).

Редактировать : Я запомнил неправильно;если fixed не задано, настройка precision сообщает потоку общее число отображаемых цифр, включая цифры до десятичной точки.Итак, в этом случае я думаю, что единственный способ - это использовать режим fixed (примеры исправлены), который даст такое же поведение, что и printf.


Ссылки:

7 голосов
/ 13 октября 2010

Вы ищете printf("%.2f", 12.12123); или:

#include <iostream>
#include <iomanip>

using namespace std;
cout << fixed << setprecision(2) << 12.12123;

РЕДАКТИРОВАТЬ: Вопрос изменился, так же, как и ответ.

Вы никогда не хотите использовать прямое равенство с плавающей запятой, вы всегда сравниваете в пределах допуска epsilon . Ваш epsilon просто довольно большой.

Заменить if (y1 == y2) на if (abs(y1 - y2) < 0.01).

2 голосов
/ 13 октября 2010

Вы, вероятно, задаете неправильный вопрос.Попробуйте следующее:

double diff = fabs(y1-y2);
if(diff < 0.005)
    cout << "Almost same";
2 голосов
/ 13 октября 2010
#include <iostream>
#include <iomanip>

int main ()
{
   double d = 1.242354345; 
   using namespace std;
   cout << setiosflags(ios::fixed | ios::showpoint)
        << setprecision(2)
        << d; 
}
2 голосов
/ 13 октября 2010
cout.precision(2);
cout <<f;
2 голосов
/ 13 октября 2010
double num = 1.4567;
printf("%.2f",num);

Это напечатало бы 1.46

1 голос
/ 13 октября 2010
cout.setf(ios::fixed, ios::floatfield);
cout.precision(2);
float al = 42.645; //sample
cout << al;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...