2015-05-24 74 views
0

我想用下面的代碼強制轉換float。變化是一個浮點數,changeI是一個整數。棘手的輸入值是0.41,因爲它不能用二進制精確表示,但我不明白爲什麼這不起作用。將一個float類型轉換爲int時的未知行爲。

changeI = (int)(change*100) 

如果我只打印(改變* 100.0),它打印41.0000003或等價的東西,這對我的理解,如果我強制轉換,即(INT),它應該只是下降的浮點位,並留下數爲41

但是,如果我打印changeI的值,我得到413,我不知道爲什麼。

另外,如果我手動打印(INT)41.0000003它也打印爲413

編輯:

好了,我發現的主要問題,這是由方式很笨(我是印刷之後再多出一個3,並忘記之前打印的新行字符,但現在打印40而不是41)。 這是完整的代碼。

int flag = 0; 
float change; 
int changeI; 

do{ 
    printf("How much change is owed?: "); 
    scanf("%f", &change); 
    if (change >= 0){ 
     flag = 1; 
    } 
}while(!flag) 

changeI = (int)(change*100.0); 

printf("%f\n", change*100.0); 
printf("%i\n", changeI); 
printf("%i\n", (int)(41.0000003)); 

0.41的輸出是:

>41.0000003 
>40 
>41 

EDIT2:由於JackV指出,如果複製浮乘以100,另一浮動,然後強制轉換新浮法它打印41,但我會仍然想知道爲什麼會發生這種情況。

+0

定義'changeI '是一個'int',而不是'float'。 –

+0

changeI是一個int – Darwin57721

+2

你打印它怎麼樣? –

回答

1

我不知道自己在做什麼,但這樣的:

#include<stdio.h> 

int main() 
{ 
    int changeI, newI; 
    float change = 0.41, var = change * 100; 
    changeI = (int)(change*100); 
    newI = (int)(var); 
    printf("%f", var); //prints 41.000000 
    printf("int = %d\n", changeI); //prints 40 
    printf("float = %f", change); //prints 0.410000 
    printf("%d", newI); //prints 41 
    return 0; 
} 

作品完全一樣,應該把它打印:

INT = 40

浮= 0.410000

+0

以及爲什麼它打印40而不是41,如果0.41 * 100 = 41.00 ....? – Darwin57721

+0

@ Darwin57721我什至沒有注意到,我不知道爲什麼它會這樣做,但我剛剛編輯我的帖子與新的工作。我只需將原始浮點數乘以100,並將其存儲在新的浮點數中,然後將該值轉換爲int – JackV

+0

謝謝!該解決方法奏效!但我仍然想知道爲什麼這是該程序的行爲。 – Darwin57721