printf("Percent decrease: ");
printf("%.2f", (float)((orgChar-codeChar)/orgChar));
我正在使用此语句将一些结果打印到我的命令控制台,但是,我最终得到零。将等式放入另一个变量也不起作用。
orgChar = 91和codeChar = 13,如何打印出这个等式?
答案 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位且a1
为uint64_t
,则a1
在转变之前变窄,可能会出现意外结果。如果a1
是char
,则可以很好地将其转换为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)
你根本不需要施放浮动。在尝试将它们作为浮点数打印之前,只需确保两个变量都是float
或double
类型。这意味着要么将变量声明为浮点数,要么在将数据转换为浮点数时使用正确的函数,例如atof ()
(通常这是在从命令行或文件中获取数据时完成的。)
这应该有用......
#include <stdio.h>
int
main (void)
{
float orgChar = 91;
float codeChar = 13;
printf ("%.2f\n", (orgChar - codeChar) / orgChar);
return 0;
}