אתה נמצא כאן יסודות השפה  >>  סוגי נתונים  >>  מספרים עם נקודה עשרונית

מספרים עם נקודה עשרונית

מספר ממשי ניתן להגדיר בצורות הבאות:

<?php
  $a=1.24
/*מספר ממשי עם נקודה עשרונית.*/
;
  $a=1.24e3
/*מספר ממשי השקול ל-(1.24*10^3)
שזה בעצם 1240
ניתן לכתוב גם עם E במקום e.
*/
;
  $a=12.4E-3
/*מספר ממשי השקול ל-(12.4*10^(-3))
שזה בעצם 0.0124
ניתן לכתוב גם עם e במקום E.
*/
;
?>

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

<?php
  $a=(0.1+0.7)*10
/*הערך המתמטי של הביטוי הזה הוא 8*/
;
  echo "floor of \$a is: ";
  echo floor($a)
/*מחזיר את הרצפה של $a.
(עיגול למספר שלם כלפי מטה).
*/
;
?>


תגובות בנושא

אבל 04-12-02 10:00
 בניה
#112

איך מעגלים כלפי מעלה מספרים לא שלמים? למשל:
1.223123123 > 2, 24.67567 > 25......

עיגול מספרים 04-12-02 10:02
 אלי חן (מנהל)
#113

באופן נורמלי, המרה ממספר עשרוני למספר שלם - עיגול כלפי האפס.
עיגול כלפי מעלה - הפונקציה ()ceil.
עיגול כלפי מטה - הפונקציה ()floor.

מה עושה הE 10-12-02 04:02
 x1r0x
#461

לא הבנתי מה הוא עושה
וגם לא הבנתי מה עושה הסלאש
echo"floor of $a is: ";

תגובה: מה עושה הE 10-12-02 06:00
 אלי חן (מנהל)
#466

הE מסמל חזקה בבסיס של 10. מה שמופיע אחרי הE הוא החזקה.
הסלאש שמופיע הוא כדי להבריח את התו דולר ($).

לא הבנתי מה עושה 01-11-02 15:00
 [ללא שם]
#555

בקוד שהבאת פה
echo floor($a
זאת השורה האחרונה של הקוד, למה היא משמשת?
הרי הבנתי ששתי השורות הראשונות יוצרות את הפלט
אבל מה עושה השורה השלישית?

הדוגמא השניה 01-11-02 15:02
 אלי חן (מנהל)
#559

הדוגמא השניה באה לתת דוגמא הממחישה את אי הדיוק המוחלט במחשבים. במשתנה $a אמורה להיות המספר 8. אבל המחשב לא מדוייק, והוא נשמר כ ...7.99999 ואילו הפונקציה floor מחזירה את הערך השלם התחתון של המספר. לכן הרצפה של ...7.99999 הוא 7.

תגובה: לא הבנתי מה עושה 02-11-02 19:02
 OK
#619

גם אני תלמיד אז תקנו אותי במידת הצורך:
השורה
(echo floor($a
בעצם מציגה את תוצאות החישוב (הערך) של המשתנה a$
echo מציגה את הבא אחריה (באותה שורת קוד, כלומר, עד הסימן ; )
(floor($a מעגלת את הערך של המשתנה a$ (שהוא כמובן ערך עם נקודה עשרונית) כלפי האפס (כפי שנאמר בהדעה של מנהל הפורום "עיגול מספרים)

וללא כל קשר לתוכן ההודעה: כל הכבוד למנהלי האתר!
בהחלט אתר מצויין! המשיכו כך!

עזרה 02-11-02 21:01
 אנדרי
#621

echo "floor of $a is: ";
לפי הקוד הזה איך אני יודע שבפלט דווקא במקום הרצוי תיהיה התוצאה שלי?

הוצאת פלט 02-11-02 22:00
 אלי חן (מנהל)
#627

הפלט עוצר בדיוק במקום שבו אתה עוצר אותו,
וממשיך בדיוק מאותו מקום שבו הוא נעצר בפעם האחרונה.

אין פה ממש מה להבין...

אז איך אני עושה עיגול כלפי מעלה? 02-12-03 00:01
 יולו
#675

כפי שאתה אמרת כדי לעשות עיגול כלפי מעלה אני הייתי צריך לעשות בקוד שלך ככה:
echo ceil($a);
?

עיגול כלפי מעלה 02-12-03 01:01
 אלי חן (מנהל)
#678

בדיוק.. עם הפונקציה ceil

והנה דוגמא: 04-12-03 06:01
 יולו
#786

הנה דוגמא למי שלא הבין עדיין:
<?php
$a=2.5;
echo ('$a is: ' .$a. "<br>");
echo ('ceil of $a is:' .ceil($a). "<br>");
echo ('floor of $a is:' .floor($a));
?>

אני שם את הערך 2.5 (מספר עשרוני) ל:
a$
אז אני קודם כל מציג לפלט את הערך שלו.
אח"כ אני משתמש בפונקציה ()ceil כדי להציג את העיגול כלפי מעלה של 2.5
ואח"כ אני משתמש בפונקציה ()floor כדי להציג את העיגול כלפי מטה..

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

מקווה שהבנתם, יולו.

איך מתגברים על זה? 09-12-03 03:00
 רביד
#1099

זה ממש bug רציני.
למיטב ידיעתי אין עוד שפות תכנות שיש בהן את הבעייה הזו.
איך אפשר לפתור את זה?
האם יש עוד דברים כאלו?

זה לא באשמת PHP 09-12-03 18:02
 אלי חן (מנהל)
#1130

הבאג הזה שאתה מתאר הוא לא באשמת PHP.. כך עובד המחשב, המעבד.. הוא אינו יכול לשמור בכמה בתים ערך מדוייק של כל מספר ושבר..

פשוט לא עשו את זה עדיין 09-12-03 23:02
 Shau
#1148

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

באג מספרים אמיתיים 31-10-03 01:00
 ישראל
#1170

מס'תומרת שהמחשב לא יכול לשמור את הערך המדויק, כ"כ קשה למחשב לשמור את המס' 8 ?
למה כמה בתים זה כבר דורש ?!

איפה הגבול בין התרגילים שאני יקבל תוצאות האמיתיות לתוצאות חורגות מהאמת ?
ס'תומרת איך אני יכול לדעת אם המשחב יתן/נותן לי תוצאה מדויקת או קצת חורג ?

אגב, בדקתי במחשבון (ב-windows XP) והתרגיל יצא 8 ב ד י ו ק ! אז אופו טמון הבעיה ???

שמירת מספרים במחשב 31-10-03 17:01
 אלי חן (מנהל)
#1205

מחשב, כידוע, שומר ומעבד את המידע בצורה של ביטים. כל מספר עשרוני מיוצג במחשב כרצף ביטים. לא כל מספר עשרוני ניתן לייצג בצורה מדויקת ע"י מספר סופי של ביטים. כך למשל לפחות אחד הערכים של 0.1 או 0.7, שאינם מיוצגים במדויק אלא בקירוב ממש. כאשר מחברים 0.1 ו-0.7 במחשב, הוא עושה את החיבור על הביטים שלהם, ולכן אם לפחות אחד מן המחוברים אינו מיוצג במדויק, הרי שגם הסכום שלהם לא ייוצג במדויק. ואם נכפול ב-10, גם זה לא יוצג במדויק, ולכן מקבלים שערך הרצפה הוא 7 ולא 8 כמצופה. מחשב אינו יודע לחשב כמו בן-אדם, הוא פועל על ביטים ולא יודע מה משמעות המספר.

שני חוסרים בהסבר - למתקדמים 01-12-04 03:02
 צביקה
#1368

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

round(var, precision);

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

בהצלחה
צביקה

שאומרים לעגל כלפי האפס 01-11-06 23:01
 אברהם ססובר
#2726

הכוונה היא לא תמיד לעגל למטה אלא נגיד יש לך מספר שלילי הוא יעוגל כלפי האפס, זאת אומרת יעוגל למעלה...
נכון?

echo 03-12-08 10:01
 אביב אסבן
#2802

בהתחלה חשבתי שה echo זה לפלט למסך אבל אני רואה שהתמשתם בפקודה גם לעוד אפשרות כמו לעגל מה התפקיד של echo


לדף הקודםמספרים שלמים -הקודם
לתחילת הדףלתחילת הדף
הבא- מחרוזותלדף הבא