【问题标题】:C, rounding problems. UWORD, ints, and doublesC、舍入问题。 UWORD、整数和双精度数
【发布时间】:2013-01-21 14:19:01
【问题描述】:

关于这些操作的结果是什么,我有几个问题。

首先,如果我有两个整数并将它们相除并将结果保存为双精度数。是否存在任何舍入问题,例如 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

【问题讨论】:

    标签: c arithmetic-expressions


    【解决方案1】:

    您需要将int1 转换为double,以便编译器知道使用浮点计算(而不是整数计算):

    double ratio = ((double) int1) / int2;
    

    要将ration * word1 的浮点计算存储在UWORD 中,您需要再次转换它(以防止出现警告):

    UWORD word2 = (UWORD) (ratio * word1);
    

    注意:这会去掉小数,如果您需要适当的四舍五入,请尝试round() function,可从math.h 获得。 (再次,正确的铸造!)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 2011-01-22
      • 1970-01-01
      相关资源
      最近更新 更多