【发布时间】:2012-04-15 06:52:29
【问题描述】:
我有一个涉及浮点数和整数的函数。当我运行代码时,结果是错误的。当我为 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;
}
【问题讨论】:
-
4095.0/10 = 409.5,但是您在除法上使用整数语义,所以只得到 409。像这样指定等式:
((voltage+5)*(4095.0/10));或((voltage+5)*((double)4095/10))
标签: c floating-point int