อยากทราบว่า Error ที่อะไรครับผม Function แปลงตัวเลขเป็นคำอ่านภาษาไทย PHP

ตอบกระทู้

รูปแสดงอารมณ์
:icon_plusone: :like: :plusone: :gfb: :-D :) :( :-o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :angry: :baa: :biggrin:
รูปแสดงอารมณ์อื่นๆ

BBCode เปิด
[img] เปิด
[url] เปิด
[Smile icon] เปิด

กระทู้แนะนำ
   

มุมมองที่ขยายได้ กระทู้แนะนำ: อยากทราบว่า Error ที่อะไรครับผม Function แปลงตัวเลขเป็นคำอ่านภาษาไทย PHP

Re: อยากทราบว่า Error ที่อะไรครับผม Function แปลงตัวเลขเป็นคำอ่านภาษาไทย PHP

โดย Patipat » 02/07/2019 11:16 am

ได้แล้วครับผม ขอบคุณมากๆครับ :-o :-D :-D
Selection_999(129).png
Selection_999(129).png (14.19 KiB) Viewed 1308 times

Re: อยากทราบว่า Error ที่อะไรครับผม Function แปลงตัวเลขเป็นคำอ่านภาษาไทย PHP

โดย tsukasaz » 02/07/2019 11:11 am

ปรับโค้ดหน่อยครับ

จาก

โค้ด: เลือกทั้งหมด

 // จุดทศนิยม
  $strlen = strlen($number[1]);
  if ($strlen > 0) { // ทศนิยมมากกว่า 2 ตำแหน่ง คืนค่าเป็นตัวเลข
    $result .= 'จุด';
    for($i=0;$i<$strlen;$i++) {
      $result .= $numberstr[(int)$number[1][$i]];
    }
  } else { // คืนค่าเป็นจำนวนเงิน (บาท)  
เป็น

โค้ด: เลือกทั้งหมด

// จุดทศนิยม
    $check_decimal = isset($number[1]) ? (int) $number[1] : 0 ;
    if ($check_decimal)
    { // ทศนิยมมากกว่า 2 ตำแหน่ง คืนค่าเป็นตัวเลข
        $strlen = strlen($number[1]);
        $result .= 'จุด';
        for ($i = 0; $i < $strlen; $i++)
        {
            $result .= $numberstr[(int) $number[1][$i]];
        }
    }else { // คืนค่าเป็นจำนวนเงิน (บาท)  

เวลาเรียกใช้ให้ใส่แบบนี้ bathformat(number_format(2033000.00, 2, '.', ','));

Re: อยากทราบว่า Error ที่อะไรครับผม Function แปลงตัวเลขเป็นคำอ่านภาษาไทย PHP

โดย Patipat » 02/07/2019 11:08 am

เรียกแสดงแบบนี้ครับ
1 แสดงเป็นภาษาไทย
2 แสดงเป็นภาษาอังกฤษครับ
Selection_999(127).png
Selection_999(127).png (24.29 KiB) Viewed 1309 times

Re: อยากทราบว่า Error ที่อะไรครับผม Function แปลงตัวเลขเป็นคำอ่านภาษาไทย PHP

โดย tsukasaz » 02/07/2019 11:05 am

ตอนเรียกใช้ function ชื่อ bathformat เรียกใช้ยังไงครับ

Re: อยากทราบว่า Error ที่อะไรครับผม Function แปลงตัวเลขเป็นคำอ่านภาษาไทย PHP

โดย Patipat » 02/07/2019 11:04 am

thatsawan เขียน:echo ตัวแปล บรรทัด 221 มาเช็ค มีค่าจริงป่าว
เช็คไล่ย้อนขึ้นไป

ค่าเป็น 0 จริงด้วยครับ
Selection_999(125).png
Selection_999(125).png (57.68 KiB) Viewed 1311 times

Re: อยากทราบว่า Error ที่อะไรครับผม Function แปลงตัวเลขเป็นคำอ่านภาษาไทย PHP

โดย thatsawan » 02/07/2019 10:55 am

echo ตัวแปล บรรทัด 221 มาเช็ค มีค่าจริงป่าว
เช็คไล่ย้อนขึ้นไป

อยากทราบว่า Error ที่อะไรครับผม Function แปลงตัวเลขเป็นคำอ่านภาษาไทย PHP

โดย Patipat » 02/07/2019 10:52 am

ผมเขียน Function แปลงภาษาจากตัวเลขเป็นภาษาไทยแต่ว่า ในบางตัวเลขก็ใช้ได้ ปกติ บางตัวเลขก็ยังมี เออเร่อ พอจะทราบไหมครับว่า มันเป็นที่อะไรครับ

ภาพแรก ยังเออเร่ออยู่แต่ว่า ค่าอ่านได้ปกติ
Selection_999(122).png
Selection_999(122).png (66.71 KiB) Viewed 1317 times
ภาพที่สอง อ่านได้ไม่เออเร่อครับ
Selection_999(123).png
Selection_999(123).png (12.74 KiB) Viewed 1317 times
ภาพที่3 โค๊ดบรรทัดที่เออเร่อ
Selection_999(124).png
Selection_999(124).png (92.5 KiB) Viewed 1317 times
ส่วนนี้จะเป็นโค้ด Function ทั้งหมดครับ

โค้ด: เลือกทั้งหมด

<?php
function bathformat($number) {
  $numberstr = array('ศูนย์','หนึ่ง','สอง','สาม','สี่','ห้า','หก','เจ็ด','แปด','เก้า','สิบ');
  $digitstr = array('','สิบ','ร้อย','พัน','หมื่น','แสน','ล้าน');

  $number = str_replace(",","",$number); // ลบ comma
  $number = explode(".",$number); // แยกจุดทศนิยมออก

  // เลขจำนวนเต็ม

  $strlen = strlen($number[0]);
  $result = '';
  for($i=0;$i<$strlen;$i++) {
    $n = substr($number[0], $i,1);
    if($n!=0) {
      if($i==($strlen-1) AND $n==1){ $result .= 'เอ็ด'; }
      elseif($i==($strlen-2) AND $n==2){ $result .= 'ยี่'; }
      elseif($i==($strlen-2) AND $n==1){ $result .= ''; }
      else{ $result .= $numberstr[$n]; }
     $result .= $digitstr[$strlen-$i-1];
    }
  }
  
  // จุดทศนิยม
  $strlen = strlen($number[1]);
  if ($strlen > 0) { // ทศนิยมมากกว่า 2 ตำแหน่ง คืนค่าเป็นตัวเลข
    $result .= 'จุด';
    for($i=0;$i<$strlen;$i++) {
      $result .= $numberstr[(int)$number[1][$i]];
    }
  } else { // คืนค่าเป็นจำนวนเงิน (บาท)
    $result .= 'บาท';
    if ($number[1]=='0' OR $number[1]=='00' OR $number[1]=='') {
      $result .= 'ถ้วน';
    } else {
      // จุดทศนิยม (สตางค์)
      for($i=0;$i<$strlen;$i++) {
        $n = substr($number[1], $i,1);
        if($n!=0){
          if($i==($strlen-1) AND $n==1){$result .= 'เอ็ด';}
          else if($i==($strlen-2) AND $n==2){$result .= 'ยี่';}
          else if($i==($strlen-2) AND $n==1){$result .= '';}
          else{ $result .= $numberstr[$n];}
         $result .= $digitstr[$strlen-$i-1];
        }
      }
      $result .= 'สตางค์';
    }
  }
  return $result;
}
?>

ข้างบน