目标c划分两个整数

时间:2011-12-10 19:45:43

标签: objective-c

我正在尝试通过在程序中划分两个int来生成一个浮点数。这是我所期待的:

1/120 = 0.00833

以下是我正在使用的代码:

float a = 1 / 120;

然而,它并没有给我我期望的结果。当我打印出来时,我得到以下内容:

inf

4 个答案:

答案 0 :(得分:11)

执行以下操作

float a = 1./120.

答案 1 :(得分:7)

您需要指定要使用浮点数学。

有几种方法可以做到这一点:

  • 如果您真的对分割两个常量感兴趣,可以通过使第一个常量为float(或double)来指定您想要浮点数学。所需要的只是一个小数点。

    float a = 1./120;
    

    你不需要将第二个常量设为浮点数,但它不会伤害任何东西。

  • 坦率地说,这很容易错过,所以我建议添加一个尾随零和一些间距。

    float a = 1.0 / 120;
    
  • 如果你真的想用整数变量进行数学运算,你可以输入cast it:

    float a = (float)i/120;
    

答案 2 :(得分:5)

float a = 1/120;
float b = 1.0/120;
float c = 1.0/120.0;
float d = 1.0f/120.0f;

NSLog(@"Value of A:%f B:%f C:%f D:%f",a,b,c,d);

Output: Value of A:0.000000 B:0.008333 C:0.008333 D:0.008333

对于float变量a:int / int产生整数,您将其分配给float并将其打印为0.0000000

对于float变量b:float / int产生float,赋值给float并打印它0.008333

对于float变量c:float / float产生float,所以0.008333

最后一个更精确浮动。以前的类型是double类型:所有浮点值都存储为double数据类型,除非值后跟'f'以专门指定float而不是double。

答案 3 :(得分:4)

在C中(因此也在Objective-C中),表达式几乎总是在不考虑它们出现的上下文的情况下进行评估。

表达式1 / 120是两个int个操作数的分区,因此它会产生int个结果。整数除法截断,因此1 / 120产生0。结果用于初始化float对象的事实不会改变1 / 120的评估方式。

这有时可能违反直觉,特别是如果你已经习惯了计算器通常的工作方式(它们通常将所有结果存储在浮点数中)。

正如其他答案所说,为了得到接近0.00833的结果(无法准确表示,BTW),你需要做一个浮点除法而不是整数除法,通过制作一个或两个操作数浮点数。如果一个操作数是浮点而另一个是整数,则整数操作数首先转换为浮点数;整数除法运算没有直接浮点。

请注意,正如@ 0x8badf00d的评论所说,结果应为0。打印结果为inf时必须出现其他问题。如果您可以向我们展示更多代码,最好是一个小型完整程序,我们可以帮助解决这个问题。

(有些语言中整数除法产生浮点结果。即使在这些语言中,评估也不一定受其上下文的影响.Python第3版就是这样一种语言; C,Objective-C和Python版本2不是。)