Я хотел бы придумать поплавок со следующим кодом. change - float, а changeI - int. Сложное входное значение равно 0,41, поскольку оно не может быть точно представлено в двоичном формате, но я не понимаю, почему это не работает.Неизвестное поведение при приведении типа float к int.
changeI = (int)(change*100)
Если я печатаю только (изменить * 100.0) печатает 41.0000003 или что-то эквивалент, который в моем понимании, если я напечатанный материал т.е. (целое) он должен просто отбросить биты с плавающей запятой и оставить число как 41.
Однако, если я печатаю значение changeI, я получаю 413, и я действительно не знаю почему.
Кроме того, если я вручную напечатать (интермедиат) 41,0000003 он также печатается как 413
Edit:
Ok, так что я нашел главную проблему, которая на самом деле глупо, кстати (я был печати дополнительно 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 is int – Darwin57721
И как вы его печатаете ?? –