[英]jeo=(1/(1+decade)); not giving me accurate answer
int decade;
float jeo;
PRINT("Enter Decade point =\r\n");
scanf("%d",&decade);
print_decimal(decade);
PRINT("\r\n");
jeo=(1/(1+decade));
PRINT("Decade point =");
print_decimal(jeo);//my function for showing floating point number.
PRINT("\r\n");
我已经在用于ARM控制器的IAR嵌入式工作台软件中编写了此代码,但它没有给我准确的答案,有人可以告诉我为什么吗? “当我输入3.时,给我0个答案”。
您只是使用integer
进行计算,然后将其分配给float
值。 这将删除小数点后的数字。
尝试这个:
jeo=(1.0/(1.0+decade));
您正在将整数除法的结果分配给jeo
。 在这种情况下,如果decade
是除0以外的任何整数,则整数除法的结果将为0。(注意:如果decade
是-1
,则除以0
会导致不确定的行为)
当常规算术转换后的类型是整数类型时,结果是代数商(不是小数),在实现定义的方向上舍入(直到C99),并被截断为零(因为C99)
因此,使分子或分母成为float
。
jeo=((float)1/float(1+decade);
尝试这个
jeo=1/(1+float(decade));
这是因为当尝试在这样的逻辑表达式中使用整数时,结果首先以整数计算,然后转换为浮点型。 当然,此过程将删除小数点后的数字并添加人工0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.