jeo =(1 /(1+十年));没有给我准确的答案

时间:2019-01-07 07:10:39

标签: c floating-point

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个答案”。

3 个答案:

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