วันพุธที่ 3 กันยายน พ.ศ. 2557

การแปลงข้อมูลชนิดตัวเลข

  เนื่องจาก VC# นั้นเป็นเป็นภาษาที่เข้มงวดใน เรื่องของชนิดข้อมูลเป็นอย่างมากซึ่งปัญหาพื้นฐานอย่างหนึ่งที่ผู้เริ่มเขียน โปรแกรมมักจะพบอยู่เสมอก็คือ

การแปลงข้อมูล

    โดยเฉพาะอย่างยิ่งข้อมูลชนิดตัวเลข ซึ่งจากการที่เราต้องกาหนดชนิดตัวแปรและ ข้อมูลให้สอดคล้อง บางครั้งก็เกิดปัญหา เนื่องจากเราอาจ ไม่ทราบล่วงหน้าว่า ข้อมูลที่จะได้มานั้นเป็นจำนวนจริงหรือ ทศนิยม ด้วยเหตุนี้จึงมีวิธีการเปลี่ยนข้อมูลจากชนิดหนึ่ง เป็นอีกชนิดหนึ่ง (TYPE CONVERSION)

การใช้คำสั่ง Convert.ToXxx

     คำสั่ง Convert.ToXxx() ก็อย่างเช่น Convert.ToInt32(), Convert.ToDouble() เป็นต้น แต่จะแปลงจาก String Number เป็นตัวเลข นอกจากนี้แล้วคลาสต์ Convert ยังมีคาสั่ง (เมธอด) ในการแปลงข้อมูลอีกหลายแบบ

คำสั่งที่ใช้บ่อย


   ข้อมูลที่นำมาแปลงนั้น หากเรานาตัวเลขทศนิยมมาแปลงเป็นจำนวนเต็ม อาจทาให้ส่วนที่เป็นทศนิยมหายไป ดังนั้น เราควรเลือกใช้เฉพาะกรณีที่ต้องการแค่จำนวนเต็มเท่านั้น เช่น
   แต่สิ่งที่ต้องระวังคือ หากเรากำหนดตัวเลขในแบบสตริง จะไม่สามารถแปลงเลขทศนิยมเป็นจำนวนเต็มได้ เช่น กรณีต่อไปนี้จะเกิดข้อผิดพลาด

การคลาสต์ (Cast)

    การคลาสต์เป็นการเปลี่ยนชนิดข้อมูลจากชนิดหนึ่งไปเป็นอีกชนิดหนึ่ง ซึ่งไม่จำเป็นว่าต้องเป็นชนิดตัวเลขเท่านั้น สามารถใช้กับการแปลงชนิด ออบเจ็กต์ต่างๆ ได้ทั้งหมด แต่นั้นที่นี้จะกล่าวถึงเฉพาะในตัวเลขก่อน คลาสต์ที่ใช้กับตัวเลขอาจใช้เพื่อแปลงจากจำนวนที่มีทศนิยมเป็นจานวนเต็ม โดยผลลัพธ์ที่ได้จะคล้ายกับการใช้ Convert.ToXxx() นั่นเอง สาหรับวิธีการคือ วางชนิดข้อมูลที่ต้องการไว้หน้าจำนวนที่จะแปลง เช่น

การแปลงข้อมูลก่อนการคำนวณ

   การคำนวณใน VC# นั้นผลลัพธ์ที่ได้จะเป็นข้อมูลชนิดใดนั้น ขึ้นกับชนิดข้อมูลของแต่ล่ะจำนวน โดยผลกระทบตรงนี้นับว่าสำคัญมาก และเป็นปัญหาอย่างหนึ่งที่ผู้เริ่มเขียนโปรแกรมมักจะไม่ทราบสาเหตุของปัญหา เช่น ลองดูโค้ดต่อไปนี้ ซึ่งจะเกิดข้อผิดพลาด ทั้งที่ผลลัพธ์ได้เป็น 3 ซึ่งเป็น จำนวนเต็ม
    สำหรับข้อผิดพลาดที่เกิดขึ้นจะเกี่ยวกับการแปลงชนิดข้อมูล ซึ่งผู้เขียนก็จะอธิบายเป็นหลักการแบบง่ายๆ ดังนี้ คือ
- ถ้าเป็นการคานวณระหว่าง จานวนจริง
- (มีทศนิยม) ไม่ว่าจะกับจำนวนเต็มหรือจำนวนจริง ด้วยกันผลลัพธ์ที่ได้จะถูกแปลงเป็น จำนวนจริง โดย
   อัตโนมัติ แม้ว่าผลลัพธ์นั้นจะเป็นจำนวนเต็มก็ตาม และถ้าหากเรากำหนดตัวแปรที่เก็บผลลัพธ์เป็น 
   ประเภท Integer ก็จะเกิดข้อผิดพลาดขึ้น ซึ่งวิธีแก้ปัญหาก็คือ ให้กำหนดตัวแปรที่เก็บผลลัพธ์เป็น
   ประเภท Real เช่น

    ถ้าเป็นการคำนวณระหว่าง จำนวนเต็มกับจำนวนเต็ม ผลลัพธ์ที่ได้จะถูกแปลงเป็น จำนวนเต็ม
โดยอัตโนมัติ แม้ว่าผลลัพธ์ที่จะมีทศนิยมด้วย หรือจะกำหนดตัวแปรที่เก็บผลลัพธ์เป็นประเภท Real
ก็ตาม โดยส่วนมากมักเกิดขึ้นกับการหาร เช่น
ลักษณะดังกล่าวนี้ หากเรานำ ข้อมูลผลลัพธ์ที่ได้ไปใช้งานต่อไป ก็อาจก่อให้เกิดข้อผิดพลาด หรือผิดเพี้ยน
     สำหรับวิธีแก้ปัญหา เราให้กำหนดตัวแปรเก็บผลลัพธ์เป็นประเภท Real (เช่น double) แล้ว
ใช้การคลาสต์จำนวนไดจำนวนหนึ่ง หรือทั้งสองจำนวนให้เป็นข้อมูลประเภท Real หรือไม่ก็อาจใช้ Convert.ToDouble() ก็ได้ เช่น

ไม่มีความคิดเห็น:

แสดงความคิดเห็น