为什么划分两个整数不会浮动?任何人都可以解释为什么当我将它除以整数时b会在这里被舍入,尽管它是一个浮点数?#include <stdio.h>void main() {
int a;
float b, c, d;
a = 750;
b = a / 350;
c = 750;
d = c / 350;
printf("%.2f %.2f", b, d);
// output: 2.00 2.14}http://codepad.org/j1pckw0y
3 回答
慕娘9325324
TA贡献1783条经验 获得超4个赞
这是因为隐式转换。变量b, c, d
属于float
类型。但是/
运算符看到它必须除以两个整数,因此在结果中返回一个整数,该整数float
通过添加小数点隐式转换为a 。如果你想要浮点除法,请尝试将两个操作数设置为/
浮点数。如下。
#include <stdio.h>int main() { int a; float b, c, d; a = 750; b = a / 350.0f; c = 750; d = c / 350; printf("%.2f %.2f", b, d); // output: 2.14 2.14 return 0;}
呼唤远方
TA贡献1856条经验 获得超11个赞
使用类型的铸件:
int main() { int a; float b, c, d; a = 750; b = a / (float)350; c = 750; d = c / (float)350; printf("%.2f %.2f", b, d); // output: 2.14 2.14}
这是解决这个问题的另一种方法:
int main() { int a; float b, c, d; a = 750; b = a / 350.0; //if you use 'a / 350' here, //then it is a division of integers, //so the result will be an integer c = 750; d = c / 350; printf("%.2f %.2f", b, d); // output: 2.14 2.14 }
但是,在这两种情况下,您都
慕的地10843
TA贡献1785条经验 获得超8个赞
具体来说,这不会使您的结果四舍五入,而是向零截断。因此,如果你除了-3/2,你将获得-1而不是-2。欢迎来到积分数学!在CPU可以进行浮点运算或数学协处理器的出现之前,我们用积分数学做了所有事情。尽管存在用于浮点数学的库,但它们对于通用目的而言太昂贵(在CPU指令中),因此我们对于数字的整个部分使用16位值而对于该分数使用另外16个值。
编辑:我的回答让我想起了经典的老人说“当我年纪的时候......”
- 3 回答
- 0 关注
- 428 浏览
添加回答
举报
0/150
提交
取消