C、舍入问题。 UWORD、整数和 double

标签 c arithmetic-expressions

我对这些操作的结果有几个疑问。

首先,如果我有两个整数,将它们相除并将结果保存为 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/

相关文章:

c - 什么会使 MPI_File_write_all 因浮点异常而失败?

c - 使用函数指针作为参数

c++ - Visual Studio 生成的二进制文件

BASH:百分比变化——如何计算?如何在没有 bc 的情况下获得绝对值?

c - CPU 是否自动为内存分配一个值?

c++ - 在 Visual Studio 2013 中使用 Libusb

java - java如何定义算术表达式的结果

c++ - 当二元运算符两边的符号不同时,提升规则如何工作?

c++ - 编译器在这里做了什么 : int a = b * (c * d * + e)?

prolog - 使用prolog求解算术表达式