2012-07-20 53 views
1
float f2,f1 = 123.125; 

它们之间有什么不同?objective c float numer conversion

float f1 = 123.125,f2; 

,如果我写的代码为

float f1,f2 = 123.125 

程序将有不同的结果

这里是完整的程序

float f2,f1 = 123.125; 
    //float f1 = 123.125,f2; 
    int i1,i2 = -150; 

    i1 = f1; //floating to integer 
    NSLog(@"%f assigned to an int produces %i",f1,i1); 

    f1 = i2; //integer to floating 
    NSLog(@"%i assigned to a float produces %f",i2,f1); 

    f1 = i2/100; //integer divided by integer 
    NSLog(@"%i divied by 100 prouces %f",i2,f1); 

    f2= i2/100.0; //integer divided by a float 
    NSLog(@"%i divied by 100.0 produces %f",i2,f2); 

    f2= (float)i2 /100; // type cast operator 
    NSLog(@"(float))%i divided by 100 produces %f",i2,f2); 
+1

有啥从NSLogs输出?? – samfisher 2012-07-20 07:13:12

回答

4
float f2,f1 = 123.125; // here you leave f2 uninitialized and f1 is initialized 

    float f1 = 123.125,f2; // here you leave f2 uninitialized and f1 is initialized 

    float f1,f2 = 123.125; // here you leave f1 uninitialized and f2 is initialized 

,如果你要初始化你需要做的

float f1 = 123.125f, f2 = 123.125f; 

两个变量最好你写这样的(为便于阅读)

float f1 = 123.125f; 
    float f2 = 123.125f; 

注意 “F” 后缀,表示它是一个浮点值而不是双精度值。

你也可以做一个定义

#define INITVALUE 123.125f 

float f1 = INITVALUE; 
float f2 = INITVALUE; 
+0

在此上下文中,“f”后缀是可选的,因为编译器会适当地更改文字的类型。 :) – 2012-07-20 09:15:51

+1

这不是事实,编译器将文字的类型转换为声明对象的类型,使其在此上下文中成为可选项。事实上,这个文字不会被转换改变。大多数双重文字在转换时会改变值,并且有些改变为与以“f”后缀的相同文字不同的值。 – 2012-07-20 17:44:02

0

如果要初始化与两个变量相同的值,然后使用此语法:

float f2 = f1 = 123.125f; 

您使用的代码是初始化其中一个变量而不是其他,因此您看到的行为。

+0

嗨,谢谢你的回答,我试着改变你刚刚提供的代码,整个程序都不会起作用。 – Ben 2012-07-20 07:14:16

+0

它不会工作?不好了! – trojanfoe 2012-07-20 07:14:55

+0

编译失败.... – Ben 2012-07-20 07:17:07