זה עניין של דיוק:
מחשב לא בנוי להחזיק בזיכרון מספרים עשרוניים.
לאורך השנים הומצאו שיטות שונות להציג מספרים כאלה עם סיביות, ואף פותח תקן שנקרא IEEE 754 והוא זה שמשמש את שפת C.
 
אם אתה רוצה ללמוד יותר בנושא, קרא כאן:
https://en.wikipedia.org/wiki/Double-precision_floating-point_format
 
בגדול, מה שקורה זה שאתה מקבל לא בדיוק 59.0 אחרי הכפלה, אלא כנראה משהו כמו 58.9999999999 ואז כשאתה עושה המרה ל-int החלק העשרוני פשוט נחתך, ואתה מקבל 58.
 
אם אתה מחפש קוד להפריד 2 ספרות אחרי הנקודה, תכפיל קודם ב-100, אחרי זה תמיר ל-int, ובסוף תשתמש בפעולה מודול %.