【问题标题】:Interesting output using variables with NSLog() in objective-c在objective-c中使用带有NSLog()的变量的有趣输出
【发布时间】:2015-06-12 11:01:30
【问题描述】:

以下代码:

int N = 100;
double total_time = 100;
double dt = total_time/N;
NSLog(@"Answer: %d", dt);

给出一个有趣的输出:5766 而不是 1。

仅在添加的情况下

NSLog(@"Answer: %f", dt);

输出正确答案。但是,我想输出“double”值而不是“float”。我的期望和语法有什么问题?

【问题讨论】:

  • 如果你正在尝试 Objective-C,你应该已经知道基本的 C,你应该知道的一件事是简单的 printf 格式方案(以及整数和浮点数之间的区别值)。
  • 你的意思是,如果我不懂基本的 C,我就不应该问关于 Objective-C 的问题吗?你如何定义什么是基本的,什么不是?对我来说,有些问题看起来很基础,而对于另一些问题则不然。
  • 如果你不知道,例如,如何使用printf 来打印浮点值,这是一个很好的迹象,表明你对C 不够熟悉而无法开始使用Objective-C。

标签: objective-c variables double nslog arithmetic-expressions


【解决方案1】:

%d 表示“int 的十进制表示”,而不是“double”。

你总是使用%f 输出一个双精度值,因为NSLog() 有一个开放的参数列表。在这种情况下,所有浮点数都作为双精度数传递。所以你应该把%f读作“浮点数”而不是float

【讨论】:

  • 现在,我明白了。但是为什么选择“5766”这个值呢?
  • “5766”不是一个任意选择的值,而是当解释为 %d 指定的有符号 32 位整数时字节所代表的含义。
【解决方案2】:

%d 和 %i 是一回事,都是十进制整数格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2013-05-04
    • 2012-02-03
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多