C++ virgule flottante pour les conversions de type integer
Quelles sont les différentes techniques utilisées pour convertir flotteur type de données entier en 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;
}
Vous devez vous connecter pour publier un commentaire.
Ce que vous cherchez est "la conversion de type'. typecasting (mettre le type de savoir vous voulez entre parenthèses) indique au compilateur que vous savez ce que vous faites et êtes cool avec elle. Le vieux chemin qui est hérité de C est comme suit.
Si vous aviez seulement essayé d'écrire
Vous avez reçu un avertissement que vous ne pouvez pas implicitement (automatiquement) de convertir un
float
à unint
, que vous perdez la virgule.C'est dénommé à l'ancienne comme le C++ offre une alternative supérieure, statique exprimés"; cela fournit une façon beaucoup plus sécuritaire de la conversion d'un type vers un autre. L'équivalent de la méthode (et la façon dont vous devriez le faire)
Cette méthode peut paraître un peu plus longue haleine, mais il fournit beaucoup mieux à la manipulation de situations telles que accidentellement une demande de "statique cast" sur un type qui ne peut pas être converti. Pour plus d'informations sur le pourquoi devriez-vous utiliser statique de la fonte, voir cette question.
NaN
, comment pourrais-le au-dessus de "l'ancienne méthode" code de résultat dans un unconvertible type? Nous savons à l'avance quevar_a
est un float.Façon normale est de:
Taille de certains types float peut dépasser la taille de
int
.Cet exemple montre d'un coffre-fort conversion de tout type float pour
int
à l'aide de laint safeFloatToInt(const FloatType &num);
fonction:Résultat:
Pour la plupart des cas (long de flotteurs, long long double et long double):
Découvrez le coup de pouce NumericConversion de la bibliothèque. Elle permettra de contrôler explicitement la façon dont vous souhaitez faire face à des questions comme la gestion de dépassement et de troncature.
Je crois que vous pouvez le faire à l'aide d'un plâtre:
la technique la plus facile est de simplement attribuer float int, par exemple:
ce sera tronquée, tout derrière virgule flottante ou vous pouvez de votre tour de nombre à virgule avant.
Une chose que je veux ajouter. Parfois, il peut y avoir perte de précision. Vous pouvez ajouter un peu de valeur epsilon d'abord avant de les convertir. Pas sûr, pourquoi ce qui marche... mais ça marche.