У овом упутству ћемо научити о флоат и доубле типовима података уз помоћ примера. Такође ћемо размотрити неке од кључних разлика између њих и када их користити.
У Ц ++, и и float
типови double
података се користе за вредности у покретном зарезу. Бројеви с помичном зарезом користе се за децималне и експоненцијалне вриједности. На пример,
// 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
Морамо додати суфикс f
или F
на крају float
вредности. То је зато што преводилац децималне вредности без суфикса тумачи као double
.
Размислите о овом коду.
float a = 5.6;
Овде смо променљивој доделили double
вредност float
.
У овом случају, преводилац аутоматски претвара у 5.6float
пре него што га додели променљивој а. То може довести до губитка података. Да бисте сазнали више, посетите Ц ++ претворбу типова.
Разлика између флоат и доубле
пловак | двоструко |
---|---|
Величина: 4 бајта | Величина: 8 бајтова |
Прецизност: Генерално, прецизност 7 децималних цифара | Прецизност: Генерално, прецизност 15 децималних цифара |
Пример: 3.56f , 3e5f етц. | Пример: 3.56 , 3e5 етц. |
Напомена: Осим ако немате одређени захтев, увек користите double
уместо float
, јер float
променљиве могу бити склоне увођењу грешака у раду са великим бројевима.
Пример 1: Ц ++ флоат и доубле
#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; )
Оутпут
Број двоструког типа = 3.91235 Број флоат-типа = 3.91235
Напомена: Компајлер коришћен за овај пример (компајлер МинГВ) дозвољава 6 цифара. Дакле, наше променљиве вредности су заокружене и скраћене на 6 цифара од стране преводилаца.
сетпрецисион () за одређивање децималних поена
cout
Помоћу setprecision()
функције можемо одредити број децималних места за испис .
Ова функција је дефинисана у iomanip
заглавној датотеци, која представља манипулацију улазом / излазом .
Пример 2: Коришћење сетпрецисион () за бројеве са помичном зарезом
#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; )
Оутпут
Број двоструког типа = 3.912348239293 Број флоат-типа = 3.912348270416
Као што видимо из горњег примера, одредили смо прецизност до 13 цифара.
cout << setprecision(13);
Вредност са помичном зарезом коју смо доделили нашим променљивим такође се састоји од 13 цифара.
Међутим, пошто float
има прецизност до само 7 цифара, приказује вредности смећа након што је његова прецизност премашена.
Наша double
променљива показује тачан број јер има прецизност од 15 цифара, док се сам број састоји од 13 цифара.
Као алтернативу, можемо одредити различите прецизности за различите променљиве током њиховог штампања.
Пример 3: Различите прецизности за различите променљиве
#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; )
Оутпут
Број двоструког типа = 3.9123482393 Број типа флоат = 3.912348
Из горњег програма видимо да смо поставили две различите вредности прецизности за float
и double
.
У оба случаја прецизност је мања од стварних цифара броја. Дакле, последња цифра се заокружује, а остатак се скраћује.
Напомена: Ако одредимо прецизност већу од прецизности самог типа података (7 фор float
и 15 фор double
), тада ће нам преводилац дати вредности смећа након прекорачења ограничења прецизности, као што се може видети на float
излазу у примеру 2 .
Рад са експоненцијалним бројевима
Као што је горе поменуто, float
а double
може се користити и за представљање експоненцијалних бројева . На пример,
// ex = 325 X (10 25) double ex = 325E25;
Ц ++ даје експоненцијалне бројеве и врло велике бројеве у формату који се назива научни формат. Променљива ек ће се подразумевано приказивати у овом формату, јер је реч о веома великом броју.
Да бисмо приморали Ц ++ да приказује бројеве с помичном зарезом у scientific
формату, без обзира на величину броја, користимо спецификатор формата scientific
унутар cout
.
double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;
Поред тога, постоји још један спецификатор формата познат као fixed
, који приказује бројеве с помичном зарезом у децималном формату.
Слично је приказивању бројева са помичном зарезом само коришћењем cout
споља setprecision()
, осим чињенице која fixed
приказује бројеве до 6 децималних места.
С друге стране, само коришћење cout
цифара приказује у складу са одређеним компајлером (укупно 6 цифара у случају компајлера МинГВ , укључујући цифре испред децималне тачке).
Пример 4: Фиксни и научни формати
#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; )
Оутпут
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;
Напомена: Типови података са покретном тачком које подржава Ц ++ су float
, double
и long double
. Не постоји long float
.