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

mus*_*oom 22 c

任何人都可以解释为什么当我将它除以整数时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
}
Run Code Online (Sandbox Code Playgroud)

http://codepad.org/j1pckw0y

Suk*_*lra 31

这是因为隐式转换.变量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;
}
Run Code Online (Sandbox Code Playgroud)

  • 结果不会****转换成浮点数.******是程序员所做的*显式*.结果是**从`int`隐式转换**到`float`.术语很重要. (6认同)

Cac*_*nta 12

使用类型的铸件:

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
}
Run Code Online (Sandbox Code Playgroud)

这是解决这个问题的另一种方法:

 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
    }
Run Code Online (Sandbox Code Playgroud)

但是,在这两种情况下,您都告诉编译器350是浮点数,而不是整数.因此,除法的结果将是浮点数,而不是整数.

  • 实际上,`350.0`是一个`double`,操作的结果将是一个`double`,然后转换为`float`进行赋值.`350.0f`将是一个`浮动`. (7认同)
  • @jon类型的范围和精度.它们_may_是相等的,但通常,`float`是一个32位类型,具有24位精度,它可以存储的最大有限数是3.4028235e38,最小的正数是1.0e-45,而`double`是一个具有53位精度的64位类型,能够存储高达1.7976931348623157e308的数字,小至5.0e-324. (5认同)
  • 这会产生相同的结果吗?`b = (浮点数) a / 350;` (2认同)
  • @DanielFischer 感谢您的澄清。double 和 float 之间到底有什么区别? (2认同)