שאלה בשפת C בנושא casting

riovelo

New member
שאלה בשפת C בנושא casting

שלום, האם למישהו יש מושג מדוע התוצאה שאני מקבל בהרצה היא 58 ולא 59?
תודה.

 

BravoMan

Active member
זה עניין של דיוק:

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