Top Banner
PHP: Hypertext Preprocessor สสสสส สสสสสสสสส สสสสสสสสสสสสสสสสสสสสสสสสสสสสสสสสสสสสสสสสสสสสสส สสสสสสสสสสสสสส สสสสสสสสสสสสสสสสส สสสสส 11 [Numbers ] 1
30

PHP: Hypertext Preprocessor

Feb 24, 2016

Download

Documents

hazina

บทที่ 11 [Numbers ]. PHP: Hypertext Preprocessor. สัญญา เครือหงษ์ ภาควิชาวิทยาการคอมพิวเตอร์และเทคโนโลยีสารสนเทศ คณะวิทยาศาสตร์ มหาวิทยาลัยนเรศวร. วัตถุประสงค์การเรียนรู้ประจำบท. ในบทนี้จะอธิบายการทำงานกับเลขจำนวน (Numbers ). กิจกรรมการเรียนการสอน. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: PHP: Hypertext  Preprocessor

1

PHP:Hypertext Preprocessor

สญญา เครอหงษภาควชาวทยาการคอมพวเตอรและเทคโนโลยสารสนเทศคณะวทยาศาสตร มหาวทยาลยนเรศวร

บทท 11[Numbers]

Page 2: PHP: Hypertext  Preprocessor

2

วตถประสงคการเรยนรประจำาบท• ในบทนจะอธบายการทำางานกบเลขจำานวน (Numbers)

Page 3: PHP: Hypertext  Preprocessor

3

กจกรรมการเรยนการสอน•บรรยายโดยผสอนและใชเอกสารประกอบการสอนของผสอน

•สอนโดยใชสอคอมพวเตอรผานเครองฉาย•อภปรายในชนเรยนรวมกน• ใหนสตคนควาเพมเตมจากตำาราและเอกสารทเกยวของ

•ทำาแบบฝกหดทายบท

Page 4: PHP: Hypertext  Preprocessor

4

การประเมนผล•ประเมนผลจากการตอบคำาถามและอภปรายในชนเรยน

•ทำาแบบฝกหดทายบท•ทำารายงานสง

Page 5: PHP: Hypertext  Preprocessor

5

เลขจำานวนเตมสามารถเขยนคาจำานวนเตม (Integer

Literal)ในรปฐานสบ (Decimal), ฐานสบหก (Hexadecimal) หรอฐานแปด (Octal) กได การเขยนคาในรปฐานแปดใหนำาหนาดวย 0 (ศนย) และการเขยนคาในรปฐานสบหกใหนำาหนาดวย 0x (ศนย เอกซ) เชน $a = 1234; // คาจำานวนเตมในรปฐานสบ

$a = -123; // คาจำานวนเตมลบในรปฐานสบ$a = 0123; // คาจำานวนเตมในรปฐานแปด (มคาเทากบ 83 ฐานสบ)$a = 0x1A; // คาจำานวนเตมในรปฐานสบหก (มคาเทากบ 26 ฐานสบ)

Page 6: PHP: Hypertext  Preprocessor

6

Integer Overflow

ถาหากระบคาจำานวนเตมทเกนชวงคาของชนดขอมล Integer PHP จะกำาหนดเปนชนดขอมล float ใหแทน และถาดำาเนนการใดๆ ทใหผลลพธเปนเลขจำานวนเตมทเกนชวงคาของชนดขอมล integer ผลลพธนนกจะกลายเปนชนด float เชนเดยวกน

Page 7: PHP: Hypertext  Preprocessor

7

Integer Overflow

<?$number1 = 2147483647;echo "บรรทด 1 : ";var_dump($number1); // แสดงคาและชนดขอมลของตวแปร $number1echo "<br>";$number2 = 2147483648;echo "บรรทด 2 : ";var_dump($number2); // แสดงคาและชนดขอมลของตวแปร $number2echo "<br>";echo "บรรทด 3 : " ;var_dump(0xffffffff); // แสดงคาและชนดขอมลของคา ffffffff ฐานสบหกecho "<br>";$million = 1000000;$large_number = 50000 * $million ; // กำาหนด $large_number มคา 5 หมนลานecho "บรรทด 4 :" ;var_dump($large_number); // แสดงคาและชนดขอมลของตวแปร $large_numberecho "<br>";?>

integer_overflow.php

Page 8: PHP: Hypertext  Preprocessor

8

การหารเลขจำานวนเตม

ตวดำาเนนการ / (หาร) ในภาษา PHP จะใหผลลพธเปนคาชนด float เสมอ แมวาตวถกดำาเนนการจะเปนชนด integer ทงคกตาม อาจแปลงผลหารไปเปนชนด integerโดยใชตวดำาเนนการ (int) ซงเศษจะถกปดลง (ตดทง) เสมอ หรออาจประมาณคาเปนเลขจำานวนเตมโดยใชฟงกชน round กได (แตคาจำานวนเตมทไดจะเปนชนด float) ซงเศษตงแต 0.5 ขนไปจะถกปดขน

Page 9: PHP: Hypertext  Preprocessor

9

การหารเลขจำานวนเตม <?echo "บรรทด 1 : ";var_dump(25/7); // แสดงคาและชนดขอมลของนพจน 25/7echo "<br>";echo "บรรทด 2 : ";var_dump((int)(25/7)); // แสดงคาและชนดขอมลของนพจน 25/7 หลงจากแปลงเปนชนด integer แลวecho "<br>";echo "บรรทด 3 : ";var_dump(round(25/7)); // แสดงคาและชนดขอมลของนพจน 25/7 หลงจากประมาณคาเปนเลขจำานวนเตมโดยใชฟงกชน round แลวecho "<br>";?>

integer_division.php

Page 10: PHP: Hypertext  Preprocessor

10

การแปลงเปนชนดขอมลinteger

การแปลง (convert)คาใดๆ เปนชนด integerใหใชตวดำาเนนการ (int) หรอ (integer) ซงการดำาเนนการนเรยกวา Casting อยางไรกตาม ในกรณสวนใหญไมจำาเปนตองทำา Casting เอง เนองจาก PHP จะแปลงคาเปนชนด integer ใหโดยอตโนมตอยแลวถาหากตวดำาเนนการ ฟงกชน หรอคำาสงนนตองการคาชนด integer ในการทำางาน

การแปลงคาชนดตางๆ เปนชนด integer มเงอนไขดงตอไปน• ถาแปลงคาชนด Boolean ไปเปน integer คา FALSE จะกลายเปน 0 และ

คา TRUE จะกลายเปน 1• เมอแปลงคาชนด float ไปเปน integer ตวเลขหลงจดทศนยมจะถกตดทงไป

แตถาคาชนด float นนมคาเกนขอบเขตของชนดขอมล integer ผลลพธจะไมมการกำาหนด (undefined)

Page 11: PHP: Hypertext  Preprocessor

11

เลขจำานวนทศนยมคาจำานวนทศนยม (Float Literal) สามารถเขยนไดหลายรปแบบ เชน

โดยรปแบบ AeN ( e จะเปนตวเลกหรอตวใหญกได) จะหมายถง A x 10N ดงนน -1.2e3 จงเทากบ -1.2 x 103 = -1200 และ 7E-5 เทากบ 7 x 10-5 = 0.0007 (เปนคาบวก เนองจาก -5 คอเลขชกำาลงของ 10)

$a = 1.234;$a = -1.2e3;$a = 7E-5;

หมายเหตในรปแบบ Aen หรอ AEN นน A สามารถเปนตวเลขทมจดทศนยมได (เชนคาทกำาหนดใหตวแปร $b ขางตน) สวน N จะตองเปนจำานวนเตมเทานน แตทง A และ N อาจมเครองหมายลบขางหนากได

Page 12: PHP: Hypertext  Preprocessor

12

ปญหาเรองความแมนยำาของชนด ขอมล float

เปนเรองธรรมดาสำาหรบชนดขอมล float ทบางครงการเกบเลขจำานวนทศนยมงายๆ เชน 0.1 หรอ 0.7 จะมการสญเสยความแมนยำา (precision) ของขอมลไปบางเลกนอย ซงอาจทำาใหรสกแปลกใจกบผลลพธทได เชน

ดงนน จงไมควรไวใจผลลพธของการคำานวณเลขทศนยมมากเกนไป และไมควรเปรยบเทยบเลขทศนยม 2 คาวาเทากนหรอไม (เพราะมโอกาสทมนจะไมเทากนทงๆทควรจะเทากน) ถาตองการความแมนยำาในการคำานวณเลขทศนยมจรงๆ ใหใชฟงกชนในกลม GMP หรอกลม BCMath ซงสามารถกำาหนดความแมนยำาในการคำานวณทางคณตศาสตรไดเอง

echo (int) ((0.1+0.7)*10)

Page 13: PHP: Hypertext  Preprocessor

13

การแปลงสตรงเปนเลขจำานวน

<?$num = 1+"10.5"; // บรรทด 1 : คาสตรง "10.5" จะถกแปลงเปนคาจำานวนทศนยม 10.5show_var($num);$num = 1+"-1.3e3"; // บรรทด 2 : คาสตรง "-1.3e3" จะถกแปลงเปนคาจำานวนทศนยม -1.3 x 10 หรอ 1300show_var($num);$num = 1+"bob-1.3e3"; // บรรทด 3 : คาสตรง "bob-1.3e3" จะถกแปลงเปนคาจำานวนเตม 0show_var($num);$num = 1+"bob3"; // บรรทด 4 : คาสตรง "bob3" จะถกแปลงเปนคาจำานวนเตม 0 show_var($num);$num = 1+"10 Small Pigs"; // บรรทด 5 : คาสตรง "10 Small Pigs" จะถกแปลงเปนคาจำานวนเตม 0show_var($num);

$num = 1+"10.2 Little Piggies"; // บรรทด 6 : คาสตรง "10.2 Little Piggies" จะถกแปลงเปนคาจำานวนทศนยม 10.2show_var($num);$num = "10.0 pigs "+ 1; // บรรทด 7 : คาสตรง "10.0 pigs" จะถกแปลงเปนคาจำานวนทศนยม 10.0show_var($num);$num = "10.0 pigs " + 1.0 ; // บรรทด 8 show_var($num);function show_var($var){static $i = 1 ;echo "บรรทด {$i}: ";var_dump($var);echo "<br>";$i++;}?>

convert_string_to_number.php

Page 14: PHP: Hypertext  Preprocessor

14

การแปลงสตรงเปนเลขจำานวน

หมายเหต คณไมสามารถหารหสแอสก (ASCII) ของตวอกษรโดยใชวธแปลงตว

อกษรนนไปเปน integer ( เหมอนททำาไดในภาษา C ) การแปลงระหวางตว อกษรกบคาแอสก ใหใชฟงกชน ord และ chr โดยฟงกชน ord จะให

ผลลพธ เปนคาแอสกของตวอกษรทกำาหนด สวนฟงกชน chr จะให ผลลพธเปนสตรง ซงบรรจตวอกษร 1 ตวทมคาแอสกตามทกำาหนด

Page 15: PHP: Hypertext  Preprocessor

15

ฟงกชนทใชตรวจสอบชนดขอมล• ฟงกชน is_int ใชตรวจสอบตวแปรหนงๆ วาเปนชนด integer หรอไม โดยจะใหคา TRUE ถาใช และใหคา FALSE ถาไมใช

bool is_int (mixed ตวแปร)

<?$var1 = "8247";$var2 = 76;if(is_int($var1))echo "\$var1 คอตวแปรชนด integer<br>";else echo "\$var1 ไมใชตวแปรชนด integer<br>";if (is_int($var2))echo "\$var2 คอตวแปรชนด integer<br>";else echo "\$var2 ไมใชตวแปรชนด integer<br>";?>

Page 16: PHP: Hypertext  Preprocessor

16

ฟงกชนทใชตรวจสอบชนดขอมล• ฟงกชน is_float ใชตรวจสอบตวแปรวาเปนชนด float หรอไม โดยใหคา TRUE ถาใช และใหคา FALSE ถาไมใช

• ฟงกชน is_nummeric ใชตรวจสอบวาตวแปรเปนชนดเลขจำานวนหรอเปนสตรงตวเลข (Numeric String) หรอไม โดยจะใหคา TRUE ถาใช และใหคา FALSE ถาไมใช

bool is_float (mixed ตวแปร)

bool is_nummeric (mixed ตวแปร)

Page 17: PHP: Hypertext  Preprocessor

17

ฟงกชนทใชตรวจสอบชนดขอมลis_numeric.php

<?$var1 = "8247";$var2 = "0-2619-0070";if(is_numeric($var1))echo "\$var1 คอเลขจำานวนหรอสตรงทมรปแบบเปนเลขจำานวน integer<br>";else echo "\$var1 ไมใชเลขจำานวนหรอสตรงทมรปแบบเปนเลขจำานวน integer<br>";if (is_numeric($var2))echo "\$var2 คอเลขจำานวนหรอสตรงทมรปแบบเปนเลขจำานวน integer";else echo "\$var2 ไมใชเลขจำานวนหรอสตรงทมรปแบบเปนเลขจำานวน integer";?>

Page 18: PHP: Hypertext  Preprocessor

18

ฟงกชนทใชแปลงชนดขอมล• ฟงกชน intval ใชแปลงคาของตวแปรทระบไปเปนคาจำานวนเตม แตถาฟงกชนทำางานลมเหลว จะใหคา 0 การใชฟงกชนนกบอารเรยไมมสมาชก (อารเรยวาง) จะไดคา 0 เสมอ แตถาใชกบอารเรยทมสมาชกจะไดคา 1 เสมอ

int intval (mixed ตวแปร)

Page 19: PHP: Hypertext  Preprocessor

19

ฟงกชนทใชแปลงชนดขอมล

<?echo "บรรทด 1 : " . intval(42) . "<br>";echo "บรรทด 2 : " . intval(4.2) . "<br>";echo "บรรทด 3 : " . intval('42') . "<br>";echo "บรรทด 4 : " . intval('+42') . "<br>";echo "บรรทด 5 : " . intval('-42') . "<br>";echo "บรรทด 6 : " . intval(042) . "<br>";echo "บรรทด 7 : " . intval('042') . "<br>";echo "บรรทด 8 : " . intval(1e10) . "<br>";echo "บรรทด 9 : " . intval('1e10') . "<br>";echo "บรรทด 10 : " . intval(0x1A) . "<br>";?>

intval.php

Page 20: PHP: Hypertext  Preprocessor

20

• ฟงกชน intval ใชแปลงคาของตวแปรทระบไปเปนคาจำานวนทศนยม ในคมอ PHP บอกวาฟงกชนนใชกบ อารเรยไมได แตผเขยนทดลองแลวพบวาใชได โดยจะใหผลลพธเชนเดยวกบฟงกชน intval คอถาอารเรยไมมสมาชกจะไดคา 0 (ชนด float) เสมอ แตถาอารเรยมสมาชกจะไดคา 1 (ชนด float) เสมอ

int floatvar (mixed ตวแปร)

Page 21: PHP: Hypertext  Preprocessor

21

ฟงกชนทใชประมาณคา/ปดเศษ• ฟงกชน round หาคาประมาณของเลขจำานวนโดยใหมความแมนยำาตามทกำาหนด ความแมนยำาจะหมายถง ตำาแหนงของตวเลขหลงจดทศนยมกรณกำาหนดความแมนยำาเปนคาบวก สามารถกำาหนดความแมนยำาเปนคาศนยหรอคาลบไดดวย (ดฟอลตคอศนย) ซงจะหมายถงตำาแหนง ของตวเลขขางหนาจดทศนยม (0 = หลกหนวย , -1= หลกสบ ฯลฯ)

float round (float เลขจำานวน [, int ความแมนยำา])

<?echo "บรรทด 1 : " . round(3.4) . "<br>";echo "บรรทด 2 : " . round(3.5) . "<br>";echo "บรรทด 3 : " . round(3.6) . "<br>";echo "บรรทด 4 : " . round(3.6,0) . "<br>";echo "บรรทด 5 : " . round(1.9583,2) . "<br>";echo "บรรทด 6 : " . round(1241757,-3) . "<br>";echo "บรรทด 7 : " . round(5.045,2) . "<br>";echo "บรรทด 8 : " . round(5.045,2) . "<br>";?>

Page 22: PHP: Hypertext  Preprocessor

22

ฟงกชนทใชประมาณคา/ปดเศษ• ฟงกชน ceil ใหคาเปนเลขจำานวนเตมโดยการปดเศษขน ถงแมวาผลลพธจะเปนเลขจำานวนเตมศนย แตชนดขอมลของมนจะเปน float• ฟงกชน floor ใหคาเปนเลขจำานวนเตมโดยการปดเศษลง ถงแมวาผลลพธ จะเปนเลขจำานวนเตม แตชนดขอมลของมนจะเปน float

float ceil (float เลขจำานวน )

float floor (float เลขจำานวน )

Page 23: PHP: Hypertext  Preprocessor

23

ฟงกชนทใชประมาณคา/ปดเศษตวอยางแสดงการใชฟงกชน ceil และ floor (ใหสงเกตการปดเศษคาลบ)

<?echo "บรรทด 1 : " . ceil(4.3) . "<br>";echo "บรรทด 2 : " . ceil(9.99) . "<br>";echo "บรรทด 3 : " . ceil(-4.3) . "<br>";echo "บรรทด 4 : " . ceil(-9.99) . "<br>";echo "บรรทด 5 : " . floor(4.3) . "<br>";echo "บรรทด 6 : " . floor(9.99) . "<br>";echo "บรรทด 7 : " . floor(-4.3) . "<br>";echo "บรรทด 8 : " . floor(-9.99) . "<br>";?>

ceil_floor.php

Page 24: PHP: Hypertext  Preprocessor

24

ฟงกชนทใชเปรยบเทยบคา• ฟงกชน min

ใชหาคาตำาสด โดยสามารถระบอารกวเมนตเปนเลขจำานวนตงแต 2 คาขนไป หรอระบอารกวเมนตทบรรจเลขจำานวนตางๆไวกไดฟงกชนนจะประเมนสตรงทไมใชสตรงตวเลข (Non-Numeric Srting) เปนคา 0 และจะใหผลลพธเปนสตรงนน ถาหากมนมคาตำาทสด

mixed min (mixed เลขจำานวน1, mixed เลขจำานวน2, [, mixed เลขจำานวน3 ...])

หรอ

mixed min (array อารเรยทบรรจเลขจำานวนตางๆ ไว)

Page 25: PHP: Hypertext  Preprocessor

25

ฟงกชนทใชเปรยบเทยบคา

<?echo "บรรทด 1 : " . min(2,3,1,6,7) . "<br>";$arr = array(2,4,5);echo "บรรทด 2 : " . min($arr ) . "<br>";echo "บรรทด 3 : " . min(0,'สวสด') . "<br>";echo "บรรทด 4 : " . min('สวสด',0) . "<br>";echo "บรรทด 5ฟ : " . min('สวสด',-1) . "<br>";?>

min.php

Page 26: PHP: Hypertext  Preprocessor

26

ฟงกชนทใชเปรยบเทยบคา• ฟงกชน max

ใชหาคาสงสด การใชงานจะเหมอนกบฟงกชน min

mixed max (mixed เลขจำานวน1, mixed เลขจำานวน2, [, mixed เลขจำานวน3 ...])

หรอ

mixed max (array อารเรยทบรรจเลขจำานวนตางๆ ไว)

Page 27: PHP: Hypertext  Preprocessor

27

ฟงกชนทใชจดรปแบบเลขจำานวน

• ฟงกชน number_format

ใหคาสตรงทเกดจากการนำาเลขจำานวนมาจดรปแบบ ฟงกชนนตองการอารกวเมนต 1,2 หรอ 4 ตว แตจะขออธบายเฉพาะกรณระบอารกวเมนต 1 หรอ 2 ตว

• ถาระบอารกวเมนตตวเดยวจะจดรปแบบเปนตวเลขจำานวนเตม (โดยไมมจดทศนยม) โดยม commaคนตวเลขทก 3 หลกนบจากหลกหนวยขนไป

• ถาระบอารกวเมนต 2 ตว จะจดรปแบบเปนทศนยมทมจำานวนตวเลขหลงจดทศนยมตามทกำาหนด และม comma คนตวเลขขางหนาจดทศนยมทก 3 หลกนบจากหลกหนวยขนไป

string number_format (float เลขจำานวน [, int จำานวนตวเลขหลงจดทศนยม [, string dec_point , string thousands_sep]])

Page 28: PHP: Hypertext  Preprocessor

28

ฟงกชนทใชจดรปแบบเลขจำานวน

<?$number = 1234.56;echo number_format($number) . "<br>";echo number_format($number,1) . "<br>";?>

number_format.php

Page 29: PHP: Hypertext  Preprocessor

29

สรป• การเขยนคาจำานวนเตม (Integer Literal) อาจเขยนในรปของเลขฐานสบ

ฐานแปด หรอฐานสบหกกได• เมอตองการแปลงคาใดๆ เปนชนด integer ใหใชตวดำาเนนการ (int) หรอ

(integer) หรอใชฟงกชน intval• การเขยนคาจำานวนทศนยม (Float Literal) อาจเขยนในรปแบบทใชกน

ทวไป หรอในรปแบบวทยาศาสตร คอ AeN กได ซงหมายถง A x 10N ( A คณสบ ยกกำาลง N) โดย A เปนตวเลขทมจดทศนยมได แต N ตองเปนเลขจำานวนเตมเทานน

• เมอตองการแปลงคาใดๆ เปนชนด float ใหใชตวดำาเนนการ (float) หรอ (double) หรอใชฟงกชน floatval

• ในการแปลงคาสตรงเปนคาจำานวน ถาหากสวนตนหรอทงหมดของสตรงมรปแบบเปนเลขจำานวน กจะไดผลลพธเปนเลขจำานวนนน (ซงเปนชนดขอมล integer หรอ float ขนอยกบรปแบบของเลขจำานวน) แตถาหากสวนตนของสตรงไมไดมรปแบบเปนเลขจำานวน แมวาสวนทตามหลงมาจะมรปแบบเปนเลขจำานวนกตาม จะไดผลลพธเปนศนย

• ถาตองการตรวจสอบคาและชนดขอมลของนพจนหนงๆ ในโปรแกรม ใหใชฟงกชน var_dumpa

Page 30: PHP: Hypertext  Preprocessor

30

Thank You