C++ float and double (2025)

In C++, both float and double data types are used for floating-point values. Floating-point numbers are used for decimal and exponential values. For example,

// creating float type variablesfloat num1 = 3.0f;float num2 = 3.5f;float num3 = 3E-5f; // 3x10^-5// creating double type variablesdouble num4 = 3.0;double num5 = 3.5;double num6 = 3E-5; // 3x10^-5

We must add the suffix f or F at the end of a float value. This is because the compiler interprets decimal values without the suffix as double.

Consider this code.

float a = 5.6;

Here, we have assigned a double value to a float variable.

In this case, 5.6 is converted to float by the compiler automatically before it is assigned to the variable a. This may result in data loss. To learn more, visit C++ Type conversion.

Difference Between float and double

floatdouble
Size: 4 bytesSize: 8 bytes
Precision:In general, 7 decimal digits precisionPrecision:In general, 15 decimal digits precision
Example: 3.56f, 3e5f etc.Example: 3.56, 3e5 etc.

Note: Unless you have a specific requirement, always use double instead of float, as float variables may be prone to introduce errors when working with large numbers.

Example 1: C++ float and double

#include <iomanip>#include <iostream>using namespace std;int main() { // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0;}

Output

Double Type Number = 3.91235Float Type Number = 3.91235

Note: The compiler used for this example (MinGW compiler) allowed for 6 digits. So, our variable values were rounded off and truncated to 6 digits by the compiler.

setprecision() to Specify Decimal Points

We can specify the number of decimal points to print in cout by using the setprecision() function.

This function is defined in the iomanip header file, which stands for input/output manipulation.

Example 2: Using setprecision() For Floating-Point Numbers

#include <iomanip>#include <iostream>using namespace std;int main() { // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting the precision to 12 decimal places cout << setprecision(13); // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0;}

Output

Double Type Number = 3.912348239293Float Type Number = 3.912348270416

As we can see from the example above, we have specified the precision up to 13 digits.

cout << setprecision(13);

The floating-point value we have assigned to our variables also consists of 13 digits.

However, since float has a precision of up to only 7 digits, it shows garbage values after its precision is exceeded.

Our double variable shows the correct number because it has a precision of 15 digits, while the number itself consists of 13 digits.

As an alternative, we can specify different precisions for different variables while printing them.

Example 3: Different Precisions For Different Variables

#include <iomanip>#include <iostream>using namespace std;int main() { // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting precision to 11 for double cout << "Double Type Number = " << setprecision(11) << a << endl; // Setting precision to 7 for float cout << "Float Type Number = " << setprecision(7) << b << endl; return 0;}

Output

Double Type Number = 3.9123482393Float Type Number = 3.912348

From the program above, we can see that we have set two different precision values for float and double.

In both cases, the precision is smaller than the actual digits of the number. So the last digit is rounded off and the rest is truncated.

Note: If we specify the precision greater than the precision of the data type itself (7 for float and 15 for double), then the compiler will give us garbage values after the precision limit has been exceeded, as can be seen with the float output in example 2.

Work with Exponential Numbers

As mentioned above, float and double can also be used to represent exponential numbers. For example,

// ex = 325 X (10 ^ 25)double ex = 325E25;

C++ outputs exponential numbers and very large numbers in a format called the scientific format. The variable ex will be outputted in this format by default since it is a very large number.

In order to force C++ to display our floating-point numbers in the scientific format regardless of the size of the number, we use the format specifier scientific inside of cout.

double num = 3.25;// ex = 325 X (10 ^ 25)double ex = 325E25;// using scientific formatcout << scientific << num;cout << scientific << ex;

In addition to this, there is another format specifier known as fixed, which displays floating-point numbers in the decimal format.

It is similar to displaying floating-point numbers by only using cout without setprecision(), except for the fact that fixed displays numbers up to 6 decimal points.

On the other hand, only using cout displays digits according to the specific compiler (6 total digits in the case of MinGW compiler, including the digits before the decimal point).

Example 4: Fixed and Scientific Formats

#include <iomanip>#include <iostream>using namespace std;int main() { // Creating a decimal double type variable double a = 3.912348239293; // Creating an exponential double type variable double ex1 = 325e+2; // Creating a float type variable float b = 3.912348239293f; // Creating an exponential float type variable float ex2 = 325e+2f; // Displaying output with fixed cout << "Displaying Output With fixed:" << endl; cout << "Double Type Number 1 = " << fixed << a << endl; cout << "Double Type Number 2 = " << fixed << ex1 << endl; cout << "Float Type Number 1 = " << fixed << b << endl; cout << "Float Type Number 2 = " << fixed << ex2 << endl; // Displaying output with scientific cout << "\nDisplaying Output With scientific:" << endl; cout << "Double Type Number 1 = " << scientific << a << endl; cout << "Double Type Number 2 = " << scientific << ex1 << endl; cout << "Float Type Number 1 = " << scientific << b << endl; cout << "Float Type Number 2 = " << scientific << ex2 << endl; return 0;}

Output

Displaying Output With fixed:Double Type Number 1 = 3.912348Double Type Number 2 = 32500.000000Float Type Number 1 = 3.912348Float Type Number 2 = 32500.000000Displaying Output With scientific:Double Type Number 1 = 3.912348e+000Double Type Number 2 = 3.250000e+004Float Type Number 1 = 3.912348e+000Float Type Number 2 = 3.250000e+004

long double

Apart from float and double, there is another data type that can store floating-point numbers. This is known as long double.

It usually occupies a space of 12 bytes (depends on the computer system in use), and its precision is at least the same as double, though most of the time, it is greater than that of double.

long double values should end with L. For example,

// declaring a long double variablelong double num_ldb = 2.569L;

Note: The floating-point data types supported by C++ are float, double and long double. There is no long float.

C++ float and double (2025)

References

Top Articles
Latest Posts
Recommended Articles
Article information

Author: Rev. Porsche Oberbrunner

Last Updated:

Views: 6344

Rating: 4.2 / 5 (53 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Rev. Porsche Oberbrunner

Birthday: 1994-06-25

Address: Suite 153 582 Lubowitz Walks, Port Alfredoborough, IN 72879-2838

Phone: +128413562823324

Job: IT Strategist

Hobby: Video gaming, Basketball, Web surfing, Book restoration, Jogging, Shooting, Fishing

Introduction: My name is Rev. Porsche Oberbrunner, I am a zany, graceful, talented, witty, determined, shiny, enchanting person who loves writing and wants to share my knowledge and understanding with you.