ארכיון יומי: 13 דצמבר, 2010

איך אתם עושים את זה בשפה שלכם ?

לפני שבועיים נתקלתי במצב בו תוכנה שנכתבה ברובי מנסה לחשב בצורה לא נכונה סכומי כסף שונים (חלק מהבעיה היה בגלל השימוש ב MySQL שמסתבר ששמר את הערך לא נכון), היות והיא משתמשת בנקודה צפה (floating point). אם אתם לא יודעים מה הבעיה של עבודה עם נקודות צפות, אתם מוזמנים לבדוק כאן.

כאשר אני רוצה בשפת פסקל לטפל בכסף יש לי טיפוס משתנה בשם Currency אשר נועד לחישובים כספיים, ובעצם אם אין דיוק עשרוני, אז זה באג במימוש של העבודה עם הטיפוס.

כלומר אם ניקח את הפוסט הישן שלי של התרגיל הבא:

var c : Currency;
begin
C := 0.1 + 0.2;
writeln(C:2:2);
end.

אז התשובה תהיה 0.3 בכל מקרה. עכשיו ראיתי כמה נוסחאות מתמטיות איך אפשר לקבל תוצאה כזו בשימוש עם מספרים שלמים, אבל מעניין אותי איך שפות תכנות אחרות מתמודדות עם הבעיה הזו אם בכלל זה חלק מהשפה (בפסקל זה חלק מיחידת system), או האם צריך להשתמש בספרייה חיצונית שיודעת להתמודד עם כספים בשל הבעיה העשרונית ?