试图打印方程的答案并在C中得到零。

时间:2015-09-08 11:29:38

标签: c variables printf equation

printf("Percent decrease: ");
printf("%.2f", (float)((orgChar-codeChar)/orgChar));

我正在使用此语句将一些结果打印到我的命令控制台,但是,我最终得到零。将等式放入另一个变量也不起作用。

orgChar = 91和codeChar = 13,如何打印出这个等式?

4 个答案:

答案 0 :(得分:8)

整数除法将导致结果为0,并且您将类型转换为稍后浮动的结果,因此最终您将得到0

使任何一个变量在分割前浮动

(orgChar-codeChar)/(float)orgChar

答案 1 :(得分:1)

正如其他人所提到的,减法和除法是使用整数数学转换为(float)之前完成的。到那时,整数除法的截断结果为0.而不是:

// (float)((orgChar-codeChar)/orgChar)
((float) orgChar - codeChar)/orgChar
// or 
(orgChar - codeChar)/ (float) orgChar

float参数转换为double时,作为"通常的参数提升的一部分"对于像printf()这样的可变函数的参数,也可以

printf("%.2f", (orgChar-codeChar)/ (double) orgChar);

一般来说,应该避免施法。有些演员无意中缩小操作。如果unsigned为32位且a1uint64_t,则a1在转变之前变窄,可能会出现意外结果。如果a1char,则可以很好地将其转换为unsigned

*1u的第二种方法不会缩小。这将确保a2*1u至少是unsigned的宽度。

unsigned sh1 = (unsigned) a1 >> b1;  // avoid
unsigned sh2 = a2*1u >> b2;  // better

因此,建议使用乘以1的惯用语而不是(float)(double)

printf("%.2f", (orgChar - codeChar) * 1.0 / orgChar);

答案 2 :(得分:0)

你不需要对整个表达进行类型转换。你可以简单地输入分子或分母来获得浮点数结果,精度为2位小数。 例如:

这里在这个代码中定义一个变量c作为float并不保证结果是float.for获得你需要的分子或分母所需的精确结果。

答案 3 :(得分:-2)

你根本不需要施放浮动。在尝试将它们作为浮点数打印之前,只需确保两个变量都是floatdouble类型。这意味着要么将变量声明为浮点数,要么在将数据转换为浮点数时使用正确的函数,例如atof ()(通常这是在从命令行或文件中获取数据时完成的。)

这应该有用......

#include <stdio.h>

int
main (void)
{
    float orgChar = 91;
    float codeChar = 13;

    printf ("%.2f\n", (orgChar - codeChar) / orgChar);

    return 0;
}