繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM