当我在C中打印分数结果时,为什么我得到0?

时间:2015-10-25 03:34:42

标签: c decimal fractions negative-number

我的代码中有这样的内容:

a = -2;
b = 1/a;

printf("%d", b);

printf正在打印0.有谁知道这是为什么?我该怎么做才能得到-0.5?我也尝试了"%.2f",这给了我0.00。

由于

2 个答案:

答案 0 :(得分:2)

您已经遇到整数运算。在C语言和许多其他语言中,1/2之类的分词会为您提供一个您不期望的结果,因为12都是整数,结果也是整数。整数不能存储0.5,因此结果会将其小数部分截断,最后会得到0。

要执行小数运算,您需要使用float s,double等。您可以直接键入1.0 / -2.0,也可以将值转换为其他类型与(double) a / b。只要至少有一个操作数处理小数部分,您的结果也将包含分数。

答案 1 :(得分:0)

由于未指定a和b的数据类型,我假设它们是int类型。

在C中,操作的结果取决于操作数的数据类型。结果不能比操作数本身具有更高的精度/准确度/大小。您面临的是整数算术规则。

现在,在您的情况下:b = 1/a中的-2和1都是整数,因此结果将被截断为整数,因此-1/2 = -0.5被截断为0. %.2f将没有帮助,因为b中的值已经是0。

因此要使b为-0.5。您需要将a和b都设置为float并使用%f打印。

,或者

你可以使用as int和b作为float,并将b写为1.0/a。 (这里1是浮动a是int,所以结果将浮动类型转换为int)。

,或者

通过类型转换:b = 1 / (float)a;

您需要完成类型转换规则。