我对C中的Modulus很困惑。我正在写一个小脚本,允许用户输入他们的两个数字变量,然后他们可以加,减,乘,除(简)或模(没有捕获这一个)。我在这会做错什么?我得到“无效的操作数到二进制%”错误,这意味着我需要将其格式化为int,因为它是一个浮点数。但是,使用以下方法执行此操作的最佳方法是什么?任何C帮助将不胜感激。
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;
}
我在哪里以及如何转换它?
答案 0 :(得分:3)
您可以使用如下语句:
result = (int)number1 % (int)number2;
将浮点数转换为整数并执行模数运算,但是你将失去小数精度。
您还可以包含math.h并使用fmod
result = fmod(number1, number2);
答案 1 :(得分:2)
我建议使用标准C库的fmod
功能。
答案 2 :(得分:1)
%
运算符仅适用于整数类型。要使用浮点执行相同的任务,您需要执行以下操作:
#include <math.h>
float modulus(float a, float b)
{
return a - b * floor(a / b);
}
答案 3 :(得分:0)
Mod是整数运算,因此不能在浮点数上使用。你的案子应该是这样的:
result = (int)number1 % (int)number2;
将两个浮点数转换为整数,并执行mod。但是,请注意,通过将浮点数转换为整数会丢失精度,因此结果可能不是您所期望的。
答案 4 :(得分:0)
更改
case '%':
result = number1 % number2;
到
case '%':
result = (int)number1 % (int)number2;
模数除法用于整数。将每个操作数转换为整数。