Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set the digits after decimal point

Tags:

c++

digits

I have a float number for example 12.12123 Is there a function which would display only number with 2 digits after decimal point 12.12 ?

Here is the code:

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

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

so if the y1 = 1.001 and the y2 = 1.002 they do not appear as the same.

I tried to add. cout.setf(ios::fixed, ios::floatfield); cout.precision(2);

but it does not seem to help.

like image 616
user474401 Avatar asked Oct 13 '10 11:10

user474401


People also ask

How do you write the digits after a decimal?

The first digit after the decimal represents the tenths place. The next digit after the decimal represents the hundredths place.

What is number of digits after decimal point called?

In decimal system, the number after the decimal point is called the decimal number.

How do you write 2 digits after a decimal point?

4.732 rounded to 2 decimal places would be 4.73 (because it is the nearest number to 2 decimal places). 4.737 rounded to 2 decimal places would be 4.74 (because it would be closer to 4.74). 4.735 is halfway between 4.73 and 4.74, so it is rounded up: 4.735 rounded to 2 decimal places is 4.74.

What is the set of digits of the decimal system?

decimal system, also called Hindu-Arabic number system or Arabic number system, in mathematics, positional numeral system employing 10 as the base and requiring 10 different numerals, the digits 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. It also requires a dot (decimal point) to represent decimal fractions.


2 Answers

/* 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;

In C, the 0 padding is added automatically to the right if there are not enough digits to print. In the C++ examples, instead, this is disabled; to enable this behavior, you should enable the fixed mode on the stream with std::fixed (or enabling the relevant stream flags with std::ios_base::setf()).

Edit: I remembered wrong; if fixed is not set, the precision setting says to the stream the total number of digits to display, including also the ones before the decimal point. So, in this case I think that the only way is to use the fixed mode (examples fixed), which will yield the same behavior of printf.


Links:

  • std::ios_base::precision() reference;
  • std::setprecision reference;
  • printf reference.
like image 184
Matteo Italia Avatar answered Sep 19 '22 15:09

Matteo Italia


You're looking for printf("%.2f", 12.12123); or:

#include <iostream>
#include <iomanip>

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

EDIT: Question changed, so does the answer.

You never want to use direct equality with floating point, you always compare within epsilon tolerance. Your epsilon is just quite large.

Replace if (y1 == y2) with if (abs(y1 - y2) < 0.01).

like image 35
Frédéric Hamidi Avatar answered Sep 16 '22 15:09

Frédéric Hamidi