โดย Patipat » 02/07/2019 10:52 am
ผมเขียน Function แปลงภาษาจากตัวเลขเป็นภาษาไทยแต่ว่า ในบางตัวเลขก็ใช้ได้ ปกติ บางตัวเลขก็ยังมี เออเร่อ พอจะทราบไหมครับว่า มันเป็นที่อะไรครับ
ภาพแรก ยังเออเร่ออยู่แต่ว่า ค่าอ่านได้ปกติ
- Selection_999(122).png (66.71 KiB) Viewed 1317 times
ภาพที่สอง อ่านได้ไม่เออเร่อครับ
- Selection_999(123).png (12.74 KiB) Viewed 1317 times
ภาพที่3 โค๊ดบรรทัดที่เออเร่อ
- 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;
}
?>
[size=120][color=#000040]ผมเขียน Function แปลงภาษาจากตัวเลขเป็นภาษาไทยแต่ว่า ในบางตัวเลขก็ใช้ได้ ปกติ บางตัวเลขก็ยังมี เออเร่อ พอจะทราบไหมครับว่า มันเป็นที่อะไรครับ[/color][/size]
[color=#008000][size=150]ภาพแรก ยังเออเร่ออยู่แต่ว่า ค่าอ่านได้ปกติ[/size][/color]
[attachment=2]Selection_999(122).png[/attachment]
[color=#008000][size=150]ภาพที่สอง อ่านได้ไม่เออเร่อครับ[/size][/color]
[attachment=1]Selection_999(123).png[/attachment]
[color=#FF0040][size=150]ภาพที่3 โค๊ดบรรทัดที่เออเร่อ[/size] [/color]
[attachment=0]Selection_999(124).png[/attachment]
[color=#FF0040][size=150]ส่วนนี้จะเป็นโค้ด Function ทั้งหมดครับ[/color][/size]
[code=php]<?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;
}
?>[/code]