פורסם 2011 בדצמבר 2813 שנים 105 --> 105.0 120.506 --> 120.5187.2389 --> 187.23אני צריך לעשות שהמספר יהיה עם שתי ספרות אחרי הנקודה לא בעזרת printf המספר הראשוני הוא דאבל אז חשבתי להדפיס אותו כאשר הוא int ואז להדפיס נקודה, ואז להפדיס את המספר בדאבל פחות המספר ב int כדי שישאר מספר כגון 0.305 למשל ואז לכפול במאה.הבעיה היא שזה משאיר 30 ואני צריך שזה ישאיר 3 כמו בדוגמא השניה למעלהאני צריך לעשות את זה בעזרת קאסטינג.....אשמח לקבל תשובה ח
פורסם 2011 בדצמבר 2813 שנים אתה יכול לבדוק מודולו 10 ואז לחלק ב 10. result %10 !=0 ? result : result/10 הגישה שלך די יצריתית, שזה מגניב, אבל היא גם קצת שבורה. לדוגמה: In [6]: f = 22.9In [7]: "%d.%d" % (int(f),int((f-int(f)) * 100))Out[7]: '22.89' זה פייתון,אבל זה אמור לתת לך אותה תוצאה ב java או C לצורך העניין... זה כן שונה ממעבד למעבד. למה זה קורה? ההסבר קצת ארוך, אבל תחשוב על ככה: כמה מספרים מספרים ממשיים (כאלה שאתה יכול לצייר על גרף המספרים, לדוגמה 1.543 , 0 או 42. השורש של 2 לדוגמה הוא לא כזה) אתה יכול למצוא בין 0 ל 1 ? אינסופ. נכון? עכשיו, איך אתה מייצג אינסוף אפשרויות בעזרת גודל סיפי? אתה לא. אתה עושה קרובים, ככל שיש ביטים לשחק איתם הקירובים שלך יהיו מדוייקים יותר ( double מדוייק יותר מ float ). אבל אתה אף פעם לא תהיה מדוייק בכל המקרים. נסה את זה, גש לקומפיילר הקרוב לביתך ותן לו לפתור בשבילך: 0.2 + 0.1 הנה לך ספויילר : In [10]: 0.2 + 0.1 == 0.3Out[10]: FalseIn [11]: 0.2 + 0.1Out[11]: 0.30000000000000004 מגניב, לא? בקיצור: תהיה מאוד זהיר עם floating point . וזכור את הכלל הפשוט הבא: כפל לפני חיבור. הסיבה לזה קצת טכנית (כאילו שכל השאר לא ). זה קשור לעניין שהוא שמור את המספר כחזקה ובסיס, כשאתה מחבר\מחסר הוא צריך להתאים את החזקות של 2 המספרים, כאן אתה מאבד דיוק. כפל, הוא רק מחבר את החזקות ומכפיל את הבסיס. הנה, תביט בקוד הזה: In [21]: "%d.%d" % (int(f),int(int(f*100) - int(f)*100 ))Out[21]: '22.90'
פורסם 2011 בדצמבר 2813 שנים אתה יכול לבצע casting של המספר כפול 100 ל-int. מה קיבלנו? את כל ספרות המספר + 2 אחרי הנקודה.תחשוב מה אתה עושה מפה.
פורסם 2011 בדצמבר 2813 שנים מחבר תודה vitali_pe הבנתי למה זה עושה לי טעויות....אבל עדיין לא הבנתי את הפתרוןולתגובה השניהאם יש לי 120.506 ואני מכפיל במאה יוצא 12050.6 הפכתי ל int יוצא 12050 אני מוריד מזה את ה 12000 יוצא 50וזה עדיין לא יצא בסדר כי אני צריך רק שה 5 יופיע בלי ה 0
פורסם 2011 בדצמבר 2813 שנים בדיקה פשוטה תאפשר לך לבדוק האם הספרה האחרונה היא 0 (מודולו 10) ולטפל במקרה בהתאם.
פורסם 2011 בדצמבר 2813 שנים מחבר תודה!הצלחתי בעזרתכםעשיתי על ידי חילוק במאה לאחר השגת שתי הספרות והוספתי למספר לאחר שהמרתי אותו ל int
פורסם 2011 בדצמבר 2813 שנים הבנתי למה זה עושה לי טעויות....אבל עדיין לא הבנתי את הפתרוןהקטע קוד בסוף? זהה לפתרון שלך, רק סדר הפעולות שונה, הכפל בא ראשון. הרעיון של גיל היה מצויין. אתה אפילו לא צריך לגעת במשתנה אחרי ה cast , מספיק:In [185]: numOut[185]: 1234567890In [186]: num /10**5Out[186]: 12345In [187]: num % 10**5Out[187]: 67890זה בעצם fixed point number.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.