代码之家  ›  专栏  ›  技术社区  ›  CodeLikeBeaker

可能的分数损失

  •  110
  • CodeLikeBeaker  · 技术社区  · 16 年前

    如果这是一个天真的问题,请原谅我,不过我今天不知所措。

    我有一个简单的除法计算,如下所示:

    double returnValue = (myObject.Value / 10);
    

    值是对象中的整数。

    我收到一条消息说可能会丢失分数。但是,当我将double改为int时,消息就消失了。

    有没有想过为什么会发生这种情况?

    5 回复  |  直到 16 年前
        1
  •  186
  •   Ólafur Waage    16 年前

    当您将两个整数除以一个浮点值时,分数部分将丢失。如果将其中一项强制转换为浮点,则不会出现此错误。

    例如,把10变成10.0

    double returnValue = (myObject.Value / 10.0);
    
        2
  •  60
  •   lc.    16 年前

    你在做整数除法,如果 myObject.Value 是一个int,因为 / 是整数类型。

    要进行浮点除法,表达式中的一个数字必须是浮点类型。如果myObject.Value为双精度或以下任一值,则为真:

    double returnValue = myObject.Value / 10.0;
    double returnValue = myObject.Value / 10d; //"d" is the double suffix
    double returnValue = (double)myObject.Value / 10;
    double returnValue = myObject.Value / (double)10;
    
        3
  •  7
  •   Cambium    16 年前

    整数除以整数将返回整数。将值转换为双精度或除以10.0。

        4
  •  7
  •   paxdiablo    16 年前

    假设 myObject.Value int ,方程式 myObject.Value / 10

    这意味着myObject.Value为12将导致returnValue变为1, 1.2.

    您需要首先强制转换值:

    double returnValue = (double)(myObject.Value) / 10.0;
    

    这将导致正确的值1.2,至少与double允许的正确值一样,考虑到它们的局限性,但这在其他地方讨论过,几乎是无休止的:-)。

        5
  •  4
  •   segfault    16 年前

    我想既然myObject是int,你应该

    double returnValue=(myObject.Value/10.0);