为什么双变量在c中除法后没有显示余数?

时间:2018-01-08 15:42:54

标签: c division

我必须犯一些令人震惊的错误,但是我正在计算C中2880 * 12/512的结果,即使我将结果保存在double变量中它只是没有保存剩余部分。根据谷歌和任何其他计算器2880 * 12/512 = 67.5但是根据下面的程序它是67.00。这是代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <math.h>

int main() {
    double result;
    result = 2880 * 12 / 512;
    printf("result = %f\n", result);
    return 0;
}

我正在编译名为test.c的文件,其中包含以下代码:gcc test.c -o test -lm

我做错了什么?

2 个答案:

答案 0 :(得分:2)

键入转换整数文字值。像这样。

result = (double)2880 * 12 / 512;

C11标准:

  

6.5.5乘法运算符

     

6 当整数被分割时,/运算符的结果是任何代数商   分数部分丢弃。 88)如果商a / b是可表示的,则表达式   (a/b)*b + a%b等于a。

答案 1 :(得分:2)

2880 * 12 / 512是一个整数表达式,并计算为整数。事实上它被分配给一个双变量,但精度会丢失。你需要强制转换为double,所以它的计算结果为double。

result = (double)2880 * 12 / 512;

或者附加一个小数点,告诉编译器它是一个浮点数:

result = 2880. * 12 / 512;