我必须犯一些令人震惊的错误,但是我正在计算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
。
我做错了什么?
答案 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;