如何在C中使用模数将Float转换为Int?

时间:2009-09-25 20:16:24

标签: c

我对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;
}

我在哪里以及如何转换它?

5 个答案:

答案 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;

模数除法用于整数。将每个操作数转换为整数。