我正在做这样的事情
int a = 3;
int b = 4;
float c = a/b ; //This returns 0 while its suppose to return 0.75
我想知道为什么上面的代码不起作用?我意识到3是一个int而4也是一个int。但是结果是浮动被分配给浮动。但是我在这里得到0。关于我可能做错什么的任何建议?
答案 0 :(得分:3)
首先评估除法,因为它是两个整数操作数,它的计算结果为整数...然后只分配给一个浮点数。
这是因为predefined set of rules的类型复杂性降低了。要强制结果为特定类型(至少),至少有一个操作数需要属于该类型。 (通过static_cast< >
)
因此:
float c = a / static_cast<float>(b);
答案 1 :(得分:2)
float c = a/b ;
a
和b
是整数,因此它是整数除法。
来自C ++标准:
5.6乘法运算符[expr.mul]
对于积分操作数,/运算符产生代数商,丢弃任何小数部分。
Instaed,试试这个:
float c = a / static_cast<float>(b);
(如 @TrevorHickey 建议,static_cast<float>
优于旧式(float)
演员。)
答案 2 :(得分:2)
你不能划分两个整数并获得一个浮点数。您必须转换为浮点数或将类型设置为浮点数。
float a = 3;
float b = 4;
float c = a/b;
或
float c = (float)a/(float)b;
答案 3 :(得分:0)
提示:整数除法的结果是整数。然后将除法的结果分配给浮点数。那是a / b导致int。按照你想要的方式施放,但你不会得到0.75。
答案 4 :(得分:0)
如果您使用的是C ++,则应该使用static_cast方法而不是隐式转换。 这将确保在编译时可以安全地转换类型。
float c = a/static_cast<float>(b);