PHP: Hypertext Preprocessor

Post on 24-Feb-2016

69 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

บทที่ 11 [Numbers ]. PHP: Hypertext Preprocessor. สัญญา เครือหงษ์ ภาควิชาวิทยาการคอมพิวเตอร์และเทคโนโลยีสารสนเทศ คณะวิทยาศาสตร์ มหาวิทยาลัยนเรศวร. วัตถุประสงค์การเรียนรู้ประจำบท. ในบทนี้จะอธิบายการทำงานกับเลขจำนวน (Numbers ). กิจกรรมการเรียนการสอน. - PowerPoint PPT Presentation

Transcript

1

PHP:Hypertext Preprocessor

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

บทท 11[Numbers]

2

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

3

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

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

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

4

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

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

5

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

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

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

6

Integer Overflow

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

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

8

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

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

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

10

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

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

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

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

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

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 อาจมเครองหมายลบขางหนากได

12

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

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

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

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

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

14

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

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

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

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

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>";?>

16

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

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

bool is_float (mixed ตวแปร)

bool is_nummeric (mixed ตวแปร)

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";?>

18

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

int intval (mixed ตวแปร)

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

20

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

int floatvar (mixed ตวแปร)

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>";?>

22

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

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

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

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

24

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

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

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

หรอ

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

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

26

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

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

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

หรอ

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

27

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

• ฟงกชน number_format

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

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

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

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

28

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

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

number_format.php

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

30

Thank You

top related