Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP C C++ C# AWS W3.CSS HOW TO BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS DSA TYPESCRIPT ANGULAR ANGULARJS GIT POSTGRESQL MONGODB ASP AI R GO KOTLIN SWIFT SASS VUE GEN AI SCIPY CYBERSECURITY DATA SCIENCE INTRO TO PROGRAMMING INTRO TO HTML & CSS BASH RUST TOOLS

C++ Tutorial

C++ HOME C++ Intro C++ Get Started C++ Syntax C++ Output C++ Comments C++ Variables C++ User Input C++ Data Types C++ Operators C++ Type Conversion C++ Strings C++ Math C++ Booleans C++ If...Else C++ Switch C++ While Loop C++ For Loop C++ Break/Continue C++ Arrays C++ Structures C++ Enums C++ References C++ Pointers C++ Memory Mgmt

C++ Functions

C++ Functions C++ Function Parameters C++ Function Overloading C++ Scope C++ Recursion C++ Lambda

C++ Classes

C++ OOP C++ Classes/Objects C++ Class Methods C++ Constructors C++ Destructors C++ The this Pointer C++ Access Specifiers C++ Encapsulation C++ Friend Functions C++ Inheritance C++ Polymorphism C++ Operator Overload C++ Templates

C++ Files

C++ Files

C++ Date

C++ Date

C++ Errors

C++ Errors C++ Debugging C++ Exceptions C++ Input Validation

C++ Problem Solving

C++ Problem Solving C++ Build the Logic C++ Test Cases

C++ Data Structures

C++ Data Structures & STL C++ Vectors C++ List C++ Stacks C++ Queues C++ Deque C++ Sets C++ Maps C++ Unordered Map C++ Unordered Set C++ Iterators C++ Algorithms

C++ Namespaces

C++ Namespaces

C++ Projects

C++ Projects

C++ Cert

C++ Certificate

C++ How To

C++ How Tos

C++ Examples

C++ Examples C++ Real-Life Examples C++ Compiler C++ Exercises C++ Quiz C++ Code Challenges C++ Practice Problems C++ Syllabus C++ Study Plan

C++ Reference

C++ Reference C++ Keywords C++ <algorithm> C++ <cctype> C++ <cmath> C++ <cstdlib> C++ <cstring> C++ <ctime> C++ <deque> C++ <fstream> C++ <iomanip> C++ <iostream> C++ <list> C++ <map> C++ <memory> C++ <queue> C++ <random> C++ <set> C++ <sstream> C++ <stack> C++ <stdexcept> C++ <string> C++ <unordered_map> C++ <unordered_set> C++ <vector>


C++ Type Conversion


Share

Type Conversion

Sometimes you need to change a value from one data type to another, like a decimal number to a whole number. This is called type conversion.

There are two kinds:

  • Automatic conversion - C++ does it for you
  • Manual conversion - you tell C++ to do it

Automatic Conversion

When you store a value of one type in a variable of another type, C++ converts it automatically.

An int can be stored in a double without any problem:

Example

int myInt = 9;
double myDouble = myInt;  // int to double

cout << myDouble;

Try it Yourself »

Note: myDouble now holds the value 9.0, but cout does not print zeros at the end of a decimal number. That is why it shows 9, not 9.0. See Decimal Precision to learn how to choose the number of decimals.

But when you store a double in an int, the decimals are lost:

Example

double price = 9.99;
int wholePrice = price;  // double to int

cout << wholePrice;

Try it Yourself »

Note: The decimals are cut off, not rounded. 9.99 becomes 9, not 10.


Manual Conversion

You can also convert a value yourself. In C++, the recommended way is static_cast. Write the new type inside < >, and the value inside the parentheses:

Example

double myDouble = 9.78;
int myInt = static_cast<int>(myDouble);

cout << myDouble << "\n";
cout << myInt;

Try it Yourself »

You may also see the older C-style way in other code, where you write the new type in parentheses in front of the value:

Example

double myDouble = 9.78;
int myInt = (int) myDouble;

cout << myInt;

Try it Yourself »

It does the same thing, but static_cast is easier to spot and safer to use.



Why Is Conversion Important?

When you divide two int values, the result is also an int, and the decimals are lost. This often gives the wrong answer, for example when you calculate an average:

Example

int sum = 7;
int count = 2;

double wrong = sum / count;
double right = static_cast<double>(sum) / count;

cout << wrong << "\n";
cout << right;

Try it Yourself »

7 / 2 is calculated with whole numbers first, so the result is 3, even though it is stored in a double. Converting one of the values to double before dividing gives the correct answer, 3.5.


Real-Life Example

Here is a real-life example of type conversion. A game gives the player a score out of 500. The program shows the score as a percentage, and as stars (one star for every 20 percent):

Example

int maxScore = 500;
int userScore = 423;

// Convert to double, so the division keeps the decimals
double percentage = static_cast<double>(userScore) / maxScore * 100;

// Convert to int, to get whole stars (one star for every 20 percent)
int stars = static_cast<int>(percentage / 20);

cout << "Score: " << percentage << "%\n";
cout << "Stars: " << stars;

Try it Yourself »

userScore is converted to double before dividing, so the decimals are kept (84.6). Then percentage / 20 (4.23) is converted to int, which cuts off the decimals and gives 4 stars.



Free account

Track your progress

XP earned 0 Day streak 0 Spaces 0 League —

New

Learn in Adventure Mode W3Schools Adventure App

Coding fundamentals as bite-sized lessons and challenges.

×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
sales@w3schools.com

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
help@w3schools.com

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookies and privacy policy.

Copyright 1999-2026 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.