我正在尝试通过在程序中划分两个int
来生成一个浮点数。这是我所期待的:
1/120 = 0.00833
以下是我正在使用的代码:
float a = 1 / 120;
然而,它并没有给我我期望的结果。当我打印出来时,我得到以下内容:
inf
答案 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不是。)