猿问

为什么划分两个整数不会浮动?

为什么划分两个整数不会浮动?

任何人都可以解释为什么当我将它除以整数时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


慕姐8265434
浏览 429回答 3
3回答

慕娘9325324

这是因为隐式转换。变量b, c, d属于float类型。但是/运算符看到它必须除以两个整数,因此在结果中返回一个整数,该整数float通过添加小数点隐式转换为a&nbsp;。如果你想要浮点除法,请尝试将两个操作数设置为/浮点数。如下。#include&nbsp;<stdio.h>int&nbsp;main()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a; &nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;b,&nbsp;c,&nbsp;d; &nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;750; &nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;a&nbsp;/&nbsp;350.0f; &nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;750; &nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;c&nbsp;/&nbsp;350; &nbsp;&nbsp;&nbsp;&nbsp;printf("%.2f&nbsp;%.2f",&nbsp;b,&nbsp;d); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;output:&nbsp;2.14&nbsp;2.14 &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}

呼唤远方

使用类型的铸件:int&nbsp;main()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a; &nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;b,&nbsp;c,&nbsp;d; &nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;750; &nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;a&nbsp;/&nbsp;(float)350; &nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;750; &nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;c&nbsp;/&nbsp;(float)350; &nbsp;&nbsp;&nbsp;&nbsp;printf("%.2f&nbsp;%.2f",&nbsp;b,&nbsp;d); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;output:&nbsp;2.14&nbsp;2.14}这是解决这个问题的另一种方法:&nbsp;int&nbsp;main()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;b,&nbsp;c,&nbsp;d; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;750; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;a&nbsp;/&nbsp;350.0;&nbsp;//if&nbsp;you&nbsp;use&nbsp;'a&nbsp;/&nbsp;350'&nbsp;here,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//then&nbsp;it&nbsp;is&nbsp;a&nbsp;division&nbsp;of&nbsp;integers,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//so&nbsp;the&nbsp;result&nbsp;will&nbsp;be&nbsp;an&nbsp;integer &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;750; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;c&nbsp;/&nbsp;350; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%.2f&nbsp;%.2f",&nbsp;b,&nbsp;d); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;output:&nbsp;2.14&nbsp;2.14 &nbsp;&nbsp;&nbsp;&nbsp;}但是,在这两种情况下,您都

慕的地10843

具体来说,这不会使您的结果四舍五入,而是向零截断。因此,如果你除了-3/2,你将获得-1而不是-2。欢迎来到积分数学!在CPU可以进行浮点运算或数学协处理器的出现之前,我们用积分数学做了所有事情。尽管存在用于浮点数学的库,但它们对于通用目的而言太昂贵(在CPU指令中),因此我们对于数字的整个部分使用16位值而对于该分数使用另外16个值。编辑:我的回答让我想起了经典的老人说“当我年纪的时候......”
随时随地看视频慕课网APP
我要回答