2012-07-20 42 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