关于这些操作的结果,我有几个问题。
首先,如果我有两个整数并将它们分开并将结果保存为double。是否存在任何舍入问题,使1/2等于.5而不是1.
double ratio = int1/int2;
第二,如果我现在有这个比例并乘以一个UWORD就会出现问题吗?
UWORD word1 = 4098;
UWORD word2 = ratio * word1;
顺便说一句,当我这样做时,我会收到编译器警告
narrowing or signed-to-unsigned type conversion found: double to unsigned short
答案 0 :(得分:1)
您需要将int1
强制转换为double
,以便编译器知道使用浮点计算(而不是整数计算):
double ratio = ((double) int1) / int2;
要在ration * word1
中存储UWORD
的浮点计算,需要再次投射(以防止出现警告):
UWORD word2 = (UWORD) (ratio * word1);
注意:这会砍掉小数,如果你需要适当的舍入,请尝试math.h
,{{1}}。 (再次,适当的铸造!)