วันจันทร์ที่ 14 กุมภาพันธ์ พ.ศ. 2554

3.How to convert column letters to number?


หากใครสังเกต column header ของ excel หรือ spread sheet อื่นๆแล้วจะพบว่า column header จะเป็นตัวอักษรแทนที่จะเป็นตัวเลขเหมือนกับ row header เช่น A, B, C, ..., Z, AA, ...

โจทย์คือหากต้องการเขียน function ที่รับค่า column header เหล่านี้เป็น input parameter แล้วให้คืนค่ากลับออกมาเป็นตัวเลขแทนจะทำอย่างไร

2 ความคิดเห็น:

  1. แนวคิดของข้อนี้คือ หลักการแปลงเลขฐานต่างๆให้กลับมาเป็นเลขฐาน 10 ครับ

    ตอบลบ
  2. หากทุกคนยังจำได้การเปลี่ยนเลขฐานต่างๆให้เป็นเลขฐาน 10 จะใช้หลักการคือ

    ผลรวมของ ค่าหลัก10ประจำหลักต่าง x (ฐานยกกำลังเลขประจำหลัก)
    โดยที่เลขประจำหลักเริ่มจาก 0 งง ม่ะ ???

    ตัวอย่างเช่น 0101 ฐานสองเปลี่ยนให้เป็นฐาน 10 ได้ดังนี้

    0x(2^3) + 1x(2^2) + 0x(2^1) + 1x(2^0) = 0 + 4 + 0 + 1 = 5

    ดังนั้นเมื่อ column header จึงมองเป็นเลข,ฐาน 26 ก็จะได้เป็น


    public static final int ALPHA_A = 65;
    public static int toInt(String a){
    char[] ch = a.toCharArray();
    int result = 0;
    int index = 0;
    for(int i=ch.length-1;0<=i;i--){
    result+= ((int)(ch[i]-ALPHA_A)+1)*(Math.pow(26,index));
    index++;
    }
    return result;
    }

    !!ข้อจำกัดของ function นี้คือต้องเป็นตัวพิมพ์ใหญ่เท่านั้น

    ตอบลบ