0

我有一个涉及浮点数和整数的函数。当我运行代码时,结果是错误的。当我为 input_voltage 输入 4.3 时,十进制为 3803,十六进制为 EDB。正确答案应该是 3808 和 EE0。谁能告诉我可能会发生什么?

#include <stdio.h>

int digital_encoding(float voltage);

int main()
{
    float input_voltage;
    int valid, ch;

    do{
        printf("Please enter the input voltage between 0 and 5 volts: \n");
        valid = scanf("%f", &input_voltage);
        if(input_voltage <= 0){
            printf("Enter a number larger than 0! \n");
            valid = 0;
        }
        if(input_voltage >= 5){
            printf("Enter a number less than 5! \n");
            valid = 0;
        }
    }while(valid != 1);

    digital_encoding(input_voltage);
}
int digital_encoding(float voltage)
{
    int dig_encode;
    dig_encode = ((voltage + 5)*(4095/10));
    printf("The digital encoding equals %d in decimal, and %X in HEX.\n", dig_encode, dig_encode);
    return dig_encode;
}
4

5 回答 5

6

4095/10是 409 而不是 409.5,这是整数算术,所以向下舍入。

您可能正在寻找 4095.0 / 10[或只是409.5]

于 2012-04-15T06:56:50.460 回答
1

我认为您可能需要将 (4095/10) 更改为 (4095.0/10) ,否则您将获得该比率的整数运算,其余部分被丢弃。

于 2012-04-15T06:57:53.073 回答
1

问题在这里:

 int dig_encode;
        dig_encode = ((voltage + 5)*(4095/10));

以浮点数计算结果,然后在使用前将其转换为 int。

dig_encode = (int)((voltage + 5)*(4095/10.0));
于 2012-04-15T06:58:07.783 回答
1

问题出在这里:

int digital_encoding(float voltage)
{
    **int** dig_encode;
    dig_encode = ((voltage + 5)*(4095/10));
    printf("The digital encoding equals %d in decimal, and %X in HEX.\n", dig_encode,    dig_encode);
    return dig_encode;
}

改用这个

int digital_encoding(float voltage)
{
    float dig_encode;
    dig_encode = ((voltage + 5)*(4095.00/10));
    printf("The digital encoding equals %d in decimal, and %X in HEX.\n", (int)dig_encode, (int)dig_encode);
    return (int)dig_encode;
}
于 2012-04-15T07:05:48.567 回答
0

结果4095/10int,所以是 409,而不是 409.5。这是因为两个数字都是int。要使结果浮动,您可以这样写4095.0/10

于 2012-04-15T06:59:10.450 回答