I denna handledning lär vi oss om flyt- och dubbeldatatyperna med hjälp av exempel. Vi kommer också att titta på några av de viktigaste skillnaderna mellan dem och när de ska användas.
I C ++ används både float
och double
datatyper för flytpunktsvärden. Flytpunktsnummer används för decimal- och exponentiella värden. Till exempel,
// creating float type variables float num1 = 3.0f; float num2 = 3.5f; float num3 = 3E-5f; // 3x10^-5 // creating double type variables double num4 = 3.0; double num5 = 3.5; double num6 = 3E-5; // 3x10^-5
Vi måste lägga till suffixet f
eller F
i slutet av ett float
värde. Detta beror på att kompilatorn tolkar decimalvärden utan suffixet som double
.
Tänk på den här koden.
float a = 5.6;
Här har vi tilldelat ett double
värde till en float
variabel.
I det här fallet konverteras 5.6float
automatiskt till av kompilatorn innan den tilldelas variabeln a. Detta kan leda till dataförlust. För att lära dig mer, besök C ++ typkonvertering.
Skillnad mellan float och double
flyta | dubbel |
---|---|
Storlek: 4 byte | Storlek: 8 byte |
Precision: Generellt, 7 decimalers precision | Precision: I allmänhet 15 decimalers precision |
Exempel: 3.56f , 3e5f etc. | Exempel: 3.56 , 3e5 etc. |
Obs: Om du inte har ett specifikt krav, använd alltid double
istället för float
, eftersom float
variabler kan vara benägna att införa fel när du arbetar med stora siffror.
Exempel 1: C ++ float och double
#include #include 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; )
Produktion
Dubbel typnummer = 3.91235 Flyttypnummer = 3.91235
Obs! Kompilatorn som används i detta exempel (MinGW-kompilator) tillåts för 6 siffror. Så, våra variabla värden avrundades och avkortades till 6 siffror av kompilatorn.
setprecision () för att ange decimaler
Vi kan ange antalet decimaler som ska skrivas ut cout
genom att använda setprecision()
funktionen.
Den här funktionen definieras i iomanip
rubrikfilen, som står för manipulering av in- och utdata .
Exempel 2: Använd setprecision () för flytpunktsnummer
#include #include 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; )
Produktion
Dubbel typnummer = 3.912348239293 Flyttypnummer = 3.912348270416
Som vi kan se från exemplet ovan har vi specificerat precisionen upp till 13 siffror.
cout << setprecision(13);
Det flytande punktvärdet som vi har tilldelat våra variabler består också av 13 siffror.
Eftersom den float
har en precision på upp till endast 7 siffror, visar den dock skräpvärden efter att dess precision har överskridits.
Vår double
variabel visar rätt antal eftersom den har en precision på 15 siffror, medan själva numret består av 13 siffror.
Som ett alternativ kan vi ange olika precisioner för olika variabler när vi skriver ut dem.
Exempel 3: Olika precisioner för olika variabler
#include #include 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; )
Produktion
Dubbel typnummer = 3.9123482393 Flyttypnummer = 3.912348
Från programmet ovan kan vi se att vi har ställt in två olika precisionsvärden för float
och double
.
I båda fallen är precisionen mindre än siffrorna i numret. Så den sista siffran avrundas och resten trunkeras.
Obs: Om vi anger precisionen som är större än precisionen för själva datatypen (7 för float
och 15 för double
), kommer kompilatorn att ge oss skräpvärden efter att precisionsgränsen har överskridits, vilket kan ses med float
utdata i exempel 2 .
Arbeta med exponentiella nummer
Som nämnts ovan, float
och double
kan också användas för att representera exponentiella nummer . Till exempel,
// ex = 325 X (10 25) double ex = 325E25;
C ++ matar ut exponentiella nummer och mycket stora nummer i ett format som kallas det vetenskapliga formatet. Variabeln ex kommer att matas ut i detta format som standard eftersom det är ett mycket stort antal.
För att tvinga C ++ att visa våra flytpunktsnummer i scientific
formatet oavsett storleken på numret använder vi formatspecifikationen scientific
inuti cout
.
double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;
Utöver detta finns det en annan formatspecifikator som kallas fixed
, som visar flytpunktsnummer i decimalformat.
Det liknar att visa flytpunktsnummer genom att bara använda cout
utan setprecision()
, förutom det faktum att fixed
uppvisar siffror upp till 6 decimaler.
Å andra sidan cout
visar endast siffror enligt den specifika kompilatorn (6 totala siffror för MinGW-kompilatorn , inklusive siffrorna före decimal).
Exempel 4: Fasta och vetenskapliga format
#include #include 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 << "Displaying 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; )
Produktion
Displaying Output With fixed: Double Type Number 1 = 3.912348 Double Type Number 2 = 32500.000000 Float Type Number 1 = 3.912348 Float Type Number 2 = 32500.000000 Displaying Output With scientific: Double Type Number 1 = 3.912348e+000 Double Type Number 2 = 3.250000e+004 Float Type Number 1 = 3.912348e+000 Float 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 variable long double num_ldb = 2.569L;
Notera: De flytande datatyper som stöds av C ++ är float
, double
och long double
. Det finns ingen long float
.