我对这些操作的结果有几个疑问。
首先,如果我有两个整数,将它们相除并将结果保存为 double 。是否存在任何舍入问题,例如 1/2 等于 0.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
最佳答案
您需要将 int1
转换为 double
,以便编译器知道使用浮点计算(而不是整数):
double ratio = ((double) int1) / int2;
要将 ration * word1
的浮点计算存储在 UWORD
中,您需要再次转换它(以防止出现警告):
UWORD word2 = (UWORD) (ratio * word1);
注意:这会截掉小数,如果您需要适当的舍入,请尝试 round()
function ,可从 math.h
获取。 (再次强调,通过正确的类型转换!)
关于C、舍入问题。 UWORD、整数和 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14440587/