ใช้ Function แปลงตัวเลขเป็นคำอ่านภาษาอังกฤษ PHP แล้ว error

ตอบกระทู้

รูปแสดงอารมณ์
: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] เปิด

กระทู้แนะนำ
   

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

Re: ใช้ Function แปลงตัวเลขเป็นคำอ่านภาษาอังกฤษ PHP แล้ว error

โดย jamepiyawat » 03/07/2019 2:55 pm

ทำได้แล้วครับ เป็นเพราะการเก็บตัวแปลของผมเองครับ ถ้าเก็บตัวแปลแบบธรรมดา เช่น

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

<?php $a = 1000.00; ?>
จะทำให้ตัวแปล $a เก็บแค่ 1000 เท่านั้น ไม่ได้เก็บ .00 ไปด้วยนั้นเองทำให้พอไปเข้า Function แปลงตัวเลขเป็นคำอ่านภาษาอังกฤษ มันเลย error นั้นเอง
ต้องใช้คำสั่ง number_format() เพื่อจะเก็บจุดทศนิยม

โด้ดเดิม

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

$a = 30000.00;
echo $a," = ".Currency::bahtEng($a);
โค้ดใหม่

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

$a = number_format(30000.00, 2);
$a= str_replace(',','', $a);
echo $a," = ".Currency::bahtEng($a);

Re: ใช้ Function แปลงตัวเลขเป็นคำอ่านภาษาอังกฤษ PHP แล้ว error

โดย jamepiyawat » 02/07/2019 3:29 pm

ใส่คำสั้งเช็คค่าตัวแปลด้วย is_null แล้ว
ถ้าตัวเลขที่ลงท้ายด้วย .00 ตัวแปล $ths จะไม่ได้เก็บค่าอะไรไว้เลยครับ
แต่ถ้าตัวเลขนั้นลงท้าย .25 ตัวแปล $ths ก็จะเก็บค่า 25 เอาไว้ครับทำให้ไม่มีเตือนว่า Notice: Undefined offset

Re: ใช้ Function แปลงตัวเลขเป็นคำอ่านภาษาอังกฤษ PHP แล้ว error

โดย mindphp » 02/07/2019 2:46 pm

เคยตอบไว้ให้ ที่นี่
viewtopic.php?p=156263#p156263
แต่ไม่มี comment ใดๆ กลับมา

ใช้ Function แปลงตัวเลขเป็นคำอ่านภาษาอังกฤษ PHP แล้ว error

โดย jamepiyawat » 02/07/2019 2:28 pm

ผมใช้ Function แปลงตัวเลขเป็นคำอ่านภาษาอังกฤษ PHP ก็สามารถเรีกกใช้งานได้ปกติแต่ถ้าตัวเลขมีจุดทศนิยมเป็น .00 เมือไรก็จะมีการแจ้งว่า

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

Notice: Undefined offset: 1 in /opt/lampp/htdocs/test/test11.php on line 4
โค้ดที่ใช้

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

<?php
 class Currency {
  public function bahtEng($thb) {
   list($thb, $ths) = explode('.', $thb);
   $ths = substr($ths.'00', 0, 2);
   $thb = Currency::engFormat(intval($thb)).' Baht';
   if (intval($ths) > 0) {
    $thb .= ' '.Currency::engFormat(intval($ths)).' Satang';
   }
   return $thb;
  }
  // ตัวเลขเป็นตัวหนังสือ (eng)
  private function engFormat($number) {
   $max_size = pow(10, 18);
   $suffix = "";
   if (!$number)
    return "zero";
   if (is_int($number) && $number < abs($max_size)) {
    switch ($number) {
     case $number < 0:
      $prefix = "negative";
      $suffix = Currency::engFormat(-1 * $number);
      $string = $prefix." ".$suffix;
      break;
     case 1:
      $string = "one";
      break;
     case 2:
      $string = "two";
      break;
     case 3:
      $string = "three";
      break;
     case 4:
      $string = "four";
      break;
     case 5:
      $string = "five";
      break;
     case 6:
      $string = "six";
      break;
     case 7:
      $string = "seven";
      break;
     case 8:
      $string = "eight";
      break;
     case 9:
      $string = "nine";
      break;
     case 10:
      $string = "ten";
      break;
     case 11:
      $string = "eleven";
      break;
     case 12:
      $string = "twelve";
      break;
     case 13:
      $string = "thirteen";
      break;
     case 15:
      $string = "fifteen";
      break;
     case $number < 20:
      $string = Currency::engFormat($number % 10);
      if ($number == 18) {
       $suffix = "een";
      } else {
       $suffix = "teen";
      }
      $string .= $suffix;
      break;
     case 20:
      $string = "twenty";
      break;
     case 30:
      $string = "thirty";
      break;
     case 40:
      $string = "forty";
      break;
     case 50:
      $string = "fifty";
      break;
     case 60:
      $string = "sixty";
      break;
     case 70:
      $string = "seventy";
      break;
     case 80:
      $string = "eighty";
      break;
     case 90:
      $string = "ninety";
      break;
     case $number < 100:
      $prefix = Currency::engFormat($number - $number % 10);
      $suffix = Currency::engFormat($number % 10);
      $string = $prefix."-".$suffix;
      break;
     case $number < pow(10, 3):
      $prefix = Currency::engFormat(intval(floor($number / pow(10, 2))))." hundred";
      if ($number % pow(10, 2))
      $suffix = " ".Currency::engFormat($number % pow(10, 2));
      $string = $prefix.$suffix;
      break;
     case $number < pow(10, 6):
      $prefix = Currency::engFormat(intval(floor($number / pow(10, 3))))." thousand";
      if ($number % pow(10, 3))
       $suffix = Currency::engFormat($number % pow(10, 3));
      $string = $prefix." ".$suffix;
      break;
     case $number < pow(10, 9):
      $prefix = Currency::engFormat(intval(floor($number / pow(10, 6))))." million";
      if ($number % pow(10, 6))
       $suffix = Currency::engFormat($number % pow(10, 6));
      $string = $prefix." ".$suffix;
      break;
     case $number < pow(10, 12):
      $prefix = Currency::engFormat(intval(floor($number / pow(10, 9))))." billion";
      if ($number % pow(10, 9))
       $suffix = Currency::engFormat($number % pow(10, 9));
      $string = $prefix." ".$suffix;
      break;
     case $number < pow(10, 15):
      $prefix = Currency::engFormat(intval(floor($number / pow(10, 12))))." trillion";
      if ($number % pow(10, 12))
       $suffix = Currency::engFormat($number % pow(10, 12));
      $string = $prefix." ".$suffix;
      break;
     case $number < pow(10, 18):
      $prefix = Currency::engFormat(intval(floor($number / pow(10, 15))))." quadrillion";
      if ($number % pow(10, 15))
       $suffix = Currency::engFormat($number % pow(10, 15));
      $string = $prefix." ".$suffix;
      break;
    }
   }
   return $string;
  }
 }

 $a = 30000.00;
 echo $a," = ".Currency::bahtEng($a);
แถวที่ 4 ครับ
Selection_857.png
Selection_857.png (36.71 KiB) Viewed 980 times
ตอนเรียกใช้ function

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

$a = 30000.00;
 echo $a," = ".Currency::bahtEng($a);
ผลลัพธ์ที่ได้

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

30000
Notice: Undefined offset: 1 in /opt/lampp/htdocs/test/test11.php on line 4
= thirty thousand Baht

ข้างบน