我想用下面的代碼強制轉換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,但我會仍然想知道爲什麼會發生這種情況。
定義'changeI '是一個'int',而不是'float'。 –
changeI是一個int – Darwin57721
你打印它怎麼樣? –