得到一个int而不是一个浮点数

时间:2014-09-22 23:34:37

标签: c++ casting

我正在做这样的事情

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。关于我可能做错什么的任何建议?

5 个答案:

答案 0 :(得分:3)

首先评估除法,因为它是两个整数操作数,它的计算结果为整数...然后只分配给一个浮点数。

这是因为predefined set of rules的类型复杂性降低了。要强制结果为特定类型(至少),至少有一个操作数需要属于该类型。 (通过static_cast< >

因此:

float c = a / static_cast<float>(b);

答案 1 :(得分:2)

float c = a/b ;

ab是整数,因此它是整数除法。

来自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);