代码之家  ›  专栏  ›  技术社区  ›  sudo rm -rf

对双重返回0执行操作

  •  0
  • sudo rm -rf  · 技术社区  · 14 年前

    我有一个方法接收NSstring格式的数字。

    我想把这个字符串转换成一个双精度的,我可以用它来计算温度。

    这是我的方法。

    NSString *stringTemp = text; // text is a NSString 
    NSLog(@"%@",stringTemp); // used for debugging
    double tempDouble = [stringTemp doubleValue];
    NSLog(@"%f",tempDouble); // used for debugging
    

    请注意我把 NSLog 这里的命令只是为了查看数字是否正确。后者 国家统计局 返回值 82.000000 等等(随着温度的变化而不断变化)。


    接下来我想用这个 double 并将其转换为摄氏值。为此,我做到了:

    double celsiusTemp = (5 / 9) * (tempDouble - 32);
    

    执行此操作: NSLog(@"%d", celsiusTemp); ,或此: NSLog(@"%f", celsiusTemp); 两者都在控制台中给我一个0的值。有什么理由会发生这种情况吗?我在什么地方犯了一个愚蠢的错误吗?

    谢谢你的帮助!

    3 回复  |  直到 14 年前
        1
  •  3
  •   Rudiger    14 年前

    尝试(5.0/9.0)。如果您只使用一个int进行数学运算,而您希望返回一个double(如0.55),那么小数点后的所有内容都将丢失,因为CPU希望返回一个int。

        2
  •  1
  •   John Calsbeek    14 年前

    5 / 9 是两个整数的除法,因此使用整数除法,它通常执行除法,然后截断结果。所以结果是 5/9 总是整数0。

        3
  •  0
  •   BobbyShaftoe    14 年前

    尝试:

    double celsiusTemp = (5.0 / 9) * (tempDouble - 32); 
    

    如果将(5/9)计算为整数,则它仅为0。