Что различные методы используются для преобразования типа плавающего данных к целому числу в C++?
#include <iostream>
using namespace std;
struct database {
int id, age;
float salary;
};
int main() {
struct database employee;
employee.id = 1;
employee.age = 23;
employee.salary = 45678.90;
/*
How can i print this value as an integer
(with out changing the salary data type in the declaration part) ?
*/
cout << endl << employee.id << endl << employee.
age << endl << employee.salary << endl;
return 0;
}
Размер некоторых типов float может превышать размер int
.
Этот пример показывает безопасное преобразование любого типа float в int
с помощью функции int safeFloatToInt(const FloatType &num);
:
#include <iostream>
#include <limits>
using namespace std;
template <class FloatType>
int safeFloatToInt(const FloatType &num) {
//check if float fits into integer
if ( numeric_limits<int>::digits < numeric_limits<FloatType>::digits) {
// check if float is smaller than max int
if( (num < static_cast<FloatType>( numeric_limits<int>::max())) &&
(num > static_cast<FloatType>( numeric_limits<int>::min())) ) {
return static_cast<int>(num); //safe to cast
} else {
cerr << "Unsafe conversion of value:" << num << endl;
//NaN is not defined for int return the largest int value
return numeric_limits<int>::max();
}
} else {
//It is safe to cast
return static_cast<int>(num);
}
}
int main(){
double a=2251799813685240.0;
float b=43.0;
double c=23333.0;
//unsafe cast
cout << safeFloatToInt(a) << endl;
cout << safeFloatToInt(b) << endl;
cout << safeFloatToInt(c) << endl;
return 0;
}
Результат:
Unsafe conversion of value:2.2518e+15
2147483647
43
23333
Самый простой способ - просто присвоить float int, например:
int i;
float f;
f = 34.0098;
i = f;
это обрежет все, что находится за плавающей запятой, или вы можете округлить свое число с плавающей запятой раньше.
Оцените повышение Библиотека NumericConversion . Это позволит явно контролировать, как вы хотите решать такие проблемы, как обработка переполнения и усечение.
Я считаю, что вы можете сделать это с помощью преобразования:
float f_val = 3.6f;
int i_val = (int) f_val;
Обычный способ:
float f = 3.4;
int n = static_cast<int>(f);
То, что вы ищете, - это «приведение типов». приведение типов (поместив в скобки нужный вам известный тип) сообщает компилятору, что вы знаете, что делаете, и хорошо с этим справляетесь. Старый способ, унаследованный от C, выглядит следующим образом.
float var_a = 9.99;
int var_b = (int)var_a;
Если бы вы только попытались написать
int var_b = var_a;
, вы бы получили предупреждение о том, что вы не можете неявно (автоматически) преобразовать float
в int
, так как вы проиграете десятичный.
Это называется старым способом, поскольку C ++ предлагает превосходную альтернативу «статическое приведение»; это обеспечивает более безопасный способ преобразования одного типа в другой. Эквивалентный метод будет (и то, как вы должны это делать)
float var_x = 9.99;
int var_y = static_cast<int>(var_x);
Этот метод может выглядеть немного более затянутым, но он обеспечивает гораздо лучшую обработку в таких ситуациях, как случайный запрос «статического преобразования» для типа это не может быть преобразовано. Для получения дополнительной информации о том, почему вам следует использовать статическое приведение, см. этот вопрос .