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个答案”。
答案 0 :(得分:3)
您只是使用integer
进行计算,然后将其分配给float
值。这将删除小数点后的数字。
尝试一下:
jeo=(1.0/(1.0+decade));
答案 1 :(得分:2)
您正在将integer division的结果分配给jeo
。在这种情况下,如果decade
是除0以外的任何整数,则整数除的结果将为0。(注意:如果decade
为-1
,则结果将具有未定义的行为被0
除)
当通常的算术转换后的类型是整数类型时,结果是代数商(不是小数),在实现定义的方向上(直到C99)四舍五入为零(从C99开始)
因此将分子或分母设为float
。
jeo=((float)1/float(1+decade);
答案 2 :(得分:0)
尝试一下
jeo=1/(1+float(decade));
这是因为,当尝试在这样的逻辑表达式中使用整数时,首先以整数计算结果,然后将其转换为浮点型。当然,此过程将删除小数点后的数字并添加人工0。