unsigned int 和double 转换中出现的问题

#include <stdio.h>
int main()
{
	unsigned int i = 0;
	int j = 10;
	double yl  = (double)((i - 204) / 819 * j);

	fprintf(stderr, " yl = %f ---2", yl);
	//大家猜猜结果是多少?
}


今天改程序碰到了这样一个问题,输出的结果很不正常。就算i是0,依然输出的是一个很大的证书,不管分母什么格式结果都是如此,原因出在什么地方呢,其实这是一个C语言的知识点,关于隐饰转换的问题。分子是unsigned int 分母不管是什么类型的,求出的结果依然是unsigned int,之后进行强转输出的是unsigned int之后的数字。这是一个编程中很容易忽略的地方。呵呵,任何一个问题来源都是有原因的,当你把所有问题都整理清楚了,答案就出来了。

double yl = ((double)i -204)/819*j;

这样就对了。

你可能感兴趣的:(编程,c,语言,include)