Comment puis-je convertir Float en Int avec Module en C?

Je suis tellement confus avec Modulus en C. Je suis en train d’écrire un petit script qui permet à l’utilisateur de saisir ses deux nombres numériques, puis ils peuvent soit append, soustraire, multiplier, diviser (facile) ou moduler ) Qu’est-ce que je ferais de mal en cela? J’obtiens l’erreur “Opérandes non valides selon le% binary”, ce qui signifie que je dois le formater en int, car il s’agit d’un float. Cependant, quel est le meilleur moyen de le faire avec ce qui suit? Toute aide en C serait grandement appréciée.

int main (void) { float number1, number2, result; char symbol; //allow user interaction printf("Enter your formula: \n"); scanf("%f %c %f", &number1, &symbol, &number2); switch (symbol) { case '%': result = number1 % number2; printf("Result: %f \n", result); break; default: printf("Operation Error. Program aborted. \n \n"); break; } printf("Press any key to continue \n"); getchar(); return 0; } 

Où et comment puis-je convertir cela?

Vous pouvez soit utiliser une déclaration telle que:

 result = (int)number1 % (int)number2; 

pour transformer vos flottants en entiers et effectuer l’opération de module, mais vous perdrez la précision décimale.

Vous pouvez également inclure math.h et utiliser fmod

 result = fmod(number1, number2); 

Je recommande d’utiliser la fonction fmod de la bibliothèque standard C.

L’opérateur % ne fonctionne que sur les types entiers. Pour effectuer la même tâche avec des points flottants, vous voudriez faire quelque chose comme:

 #include  float modulus(float a, float b) { return a - b * floor(a / b); } 

Mod est une opération entière, il ne peut donc pas être utilisé sur des flottants. Votre cas devrait se lire comme suit:

 result = (int)number1 % (int)number2; 

qui convertira les deux flottants en nombres entiers et effectuera le mod. Toutefois, notez que vous perdez en précision en convertissant un nombre à virgule flottante en un entier, il est donc probable que le résultat ne soit pas celui que vous attendez.

changement

 case '%': result = number1 % number2; 

à

 case '%': result = (int)number1 % (int)number2; 

?

La division modulo est pour les entiers. Convertit chaque opérande en un entier.