我的代码中有这样的内容:
a = -2;
b = 1/a;
printf("%d", b);
printf正在打印0.有谁知道这是为什么?我该怎么做才能得到-0.5?我也尝试了"%.2f"
,这给了我0.00。
由于
答案 0 :(得分:2)
您已经遇到整数运算。在C语言和许多其他语言中,1/2
之类的分词会为您提供一个您不期望的结果,因为1
和2
都是整数,结果也是整数。整数不能存储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;
您需要完成类型转换规则。