|
|
|
php ฟังก์ชั่นแปลงค่าเงินตัวเลขเป็นตัวอักษร รองรับหลัก ล้านล้าน ประยุกต์มา |
|
|
|
|
|
|
|
ขอบคุณต้นฉบับจาก https://www.thaicreate.com/php/forum/003720.html by Mr.win
เป็น
Code (PHP)
<?PHP
function convert($number){
$txtnum1 = array('ศูนย์','หนึ่ง','สอง','สาม','สี่','ห้า','หก','เจ็ด','แปด','เก้า','สิบ');
$txtnum2 = array('','สิบ','ร้อย','พัน','หมื่น','แสน','ล้าน','สิบ','ร้อย','พัน','หมื่น','แสน','ล้าน');
$number = str_replace(",","",$number);
$number = str_replace(" ","",$number);
$number = str_replace("บาท","",$number);
$number = explode(".",$number);
if(sizeof($number)>2){
return 'ทศนิยมหลายตัวนะจ๊ะ';
exit;
}
$strlen = strlen($number[0]);
$convert = '';
for($i=0;$i<$strlen;$i++){
$n = substr($number[0], $i,1);
if($n!=0){
if($i==($strlen-1) AND $n==1){ $convert .= 'เอ็ด'; }
elseif($i==($strlen-2) AND $n==2){ $convert .= 'ยี่'; }
elseif($i==($strlen-2) AND $n==1){ $convert .= ''; }
else{ $convert .= $txtnum1[$n]; }
$convert .= $txtnum2[$strlen-$i-1];
}
}
$convert .= 'บาท';
if($number[1]=='0' OR $number[1]=='00' OR
$number[1]==''){
$convert .= 'ถ้วน';
}else{
$strlen = strlen($number[1]);
for($i=0;$i<$strlen;$i++){
$n = substr($number[1], $i,1);
if($n!=0){
if($i==($strlen-1) AND $n==1){$convert
.= 'เอ็ด';}
elseif($i==($strlen-2) AND
$n==2){$convert .= 'ยี่';}
elseif($i==($strlen-2) AND
$n==1){$convert .= '';}
else{ $convert .= $txtnum1[$n];}
$convert .= $txtnum2[$strlen-$i-1];
}
}
$convert .= 'สตางค์';
}
return $convert;
}
## วิธีใช้งาน
$x = '9123568543241.25';
echo $x . "=>" .convert($x);
?>
Tag : PHP
|
|
|
|
|
|
Date :
2011-11-05 10:56:59 |
By :
tongkamlekdee |
View :
23991 |
Reply :
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คุ้นๆแหะตัวนี้
|
|
|
|
|
Date :
2011-11-05 12:19:01 |
By :
Dragons_first |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมไปเอามาจากไหนครับ มันหลายปีแล้ว 6-7 ปี
|
|
|
|
|
Date :
2011-11-08 09:40:36 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากๆๆๆครับ ^_^
|
|
|
|
|
Date :
2013-08-18 06:02:27 |
By :
มังกร |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากๆ นะคร้า
|
|
|
|
|
Date :
2013-10-27 19:59:19 |
By :
muicom |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่ไม่รองรับ
สิบเอ็ดล้าน
ยี่สิบเอ็ดล้าน
เป็นต้นครับ
|
|
|
|
|
Date :
2013-11-01 13:27:16 |
By :
ิเบิร์ด |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตัวนี้ใช้งานได้มากกว่า12หลักไม่รวมทศนิยมอีก2หลักนะครับ
Code (PHP)
<?
function Convert($amount_number)
{
$amount_number = number_format($amount_number, 2, ".","");
$pt = strpos($amount_number , ".");
$number = $fraction = "";
if ($pt === false)
$number = $amount_number;
else
{
$number = substr($amount_number, 0, $pt);
$fraction = substr($amount_number, $pt + 1);
}
$ret = "";
$baht = ReadNumber ($number);
if ($baht != "")
$ret .= $baht . "บาท";
$satang = ReadNumber($fraction);
if ($satang != "")
$ret .= $satang . "สตางค์";
else
$ret .= "ถ้วน";
return $ret;
}
function ReadNumber($number)
{
$position_call = array("แสน", "หมื่น", "พัน", "ร้อย", "สิบ", "");
$number_call = array("", "หนึ่ง", "สอง", "สาม", "สี่", "ห้า", "หก", "เจ็ด", "แปด", "เก้า");
$number = $number + 0;
$ret = "";
if ($number == 0) return $ret;
if ($number > 1000000)
{
$ret .= ReadNumber(intval($number / 1000000)) . "ล้าน";
$number = intval(fmod($number, 1000000));
}
$divider = 100000;
$pos = 0;
while($number > 0)
{
$d = intval($number / $divider);
$ret .= (($divider == 10) && ($d == 2)) ? "ยี่" :
((($divider == 10) && ($d == 1)) ? "" :
((($divider == 1) && ($d == 1) && ($ret != "")) ? "เอ็ด" : $number_call[$d]));
$ret .= ($d ? $position_call[$pos] : "");
$number = $number % $divider;
$divider = $divider / 10;
$pos++;
}
return $ret;
}
## วิธีใช้งาน
$num1 = '111111111111.11';
$num2 = '222222222222.22';
echo $num1 . " = " .Convert($num1),"<br>";
echo $num2 . " = " .Convert($num2),"<br>";
?>
ผลที่ได้คือ
111111111111.11 = หนึ่งแสนหนึ่งหมื่นหนึ่งพันหนึ่งร้อยสิบเอ็ดล้านหนึ่งแสนหนึ่งหมื่นหนึ่งพันหนึ่งร้อยสิบเอ็ดบาทสิบเอ็ดสตางค์
222222222222.22 = สองแสนสองหมื่นสองพันสองร้อยยี่สิบสองล้านสองแสนสองหมื่นสองพันสองร้อยยี่สิบสองบาทยี่สิบสองสตางค์
|
|
|
|
|
Date :
2015-01-14 04:15:10 |
By :
ชาตรี |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คุ้นๆๆเหมือนมีอยู่ในหนังสือเล่มหนึ่งตอนที่ผมหัด php ใหม่ๆเมื่อ 7ปีที่แล้ว 55555
|
ประวัติการแก้ไข 2015-01-14 21:57:07
|
|
|
|
Date :
2015-01-14 21:56:19 |
By :
somparn |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class นี้ตั้งแต่ thaidev ยังไม่เดี้ยงนู้นนนน คิดดูว่านานแค่ใหน ฮ่า
|
|
|
|
|
Date :
2015-01-15 08:57:44 |
By :
deawx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อันนี้เขียนเองชัวร์ ใช้งานอยู่ เป็นคลาส
Code (PHP)
<?PHP
class hk_baht{
public $result;
public function __construct( $num ){
$this->result=$this->toBaht( $num , true );
}
public function toBaht($number ){
if( !preg_match( '/^[0-9]+(?:\.[0-9]{2}){0,1}$/' , $number=str_replace(',', '', $number) )){
return 'This is not currency format';
}
$num = explode(".", $number);
$convert = $this->cv( $num[0]) . 'บาท' . ( $st = $this->cv( $num[1]) ) . ($st>''? 'สตางค์' : '');
return $convert;
}
private function cv( $num ){
$th_num = array('', array('หนึ่ง', 'เอ็ด'), array('สอง', 'ยี่'),'สาม','สี่','ห้า','หก','เจ็ด','แปด','เก้า','สิบ');
$th_digit = array('','สิบ','ร้อย','พัน','หมื่น','แสน','ล้าน');
$ln=strlen($num);
$t='';
for($i=$ln; $i>0;$i--){
$x=$i-1;
$n = substr($num, $ln-$i,1);
$digit=$x % 6;
if($n!=0){
if( $n==1 ){ $t .= $digit==1? '' : $th_num[1][$digit==0? 1 : 0]; }
elseif( $n==2 ){ $t .= $th_num[2][$digit==1? 1 : 0]; }
else{ $t .= $th_num[$n]; }
$t .= $th_digit[($digit==0 && $x>0 ? 6 : $digit )];
}else{
$t .= $th_digit[ $digit==0 && $x>0 ? 6 : 0 ];
}
}
return $t;
}
}
## วิธีใช้งาน
$y='10,000,021,654,321.50';
$z='10,000,011,000,321.25';
$a='10,000,000.00';
$x = new hk_baht( $y );
echo $y . "=>" .$x->result;
echo '<br>', $z, "=>", $x->toBaht( $z );
echo '<br>', $a, "=>", $x->toBaht( $a );
?>
|
|
|
|
|
Date :
2015-01-15 10:47:09 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ปรับปรุงเพิ่มเติม
Code (PHP)
<?PHP
class hk_baht{
public $result;
public function __construct( $num ){
$this->result=$this->toBaht( $num , true );
}
public function toBaht($number ){
if(!preg_match( '/^([0-9]+)(\.[0-9]{0,4}){0,1}$/' , $number=str_replace(',', '', $number), $m ))
return 'This is not currency format';
$m[2]=count($m)==3? intval(('0'.$m[2])*100 + 0.5) : 0;
$st = $this->cv( $m[2]);
return $this->cv( $m[1]) . 'บาท' . $st . ($st>''? 'สตางค์' : '');
}
private function cv( $num ){
$th_num = array('', array('หนึ่ง', 'เอ็ด'), array('สอง', 'ยี่'),'สาม','สี่','ห้า','หก','เจ็ด','แปด','เก้า','สิบ');
$th_digit = array('','สิบ','ร้อย','พัน','หมื่น','แสน','ล้าน');
$ln=strlen($num);
$t='';
for($i=$ln; $i>0;$i--){
$x=$i-1;
$n = substr($num, $ln-$i,1);
$digit=$x % 6;
if($n!=0){
if( $n==1 ){ $t .= $digit==1? '' : $th_num[1][$digit==0? ($t? 1 : 0) : 0]; }
elseif( $n==2 ){ $t .= $th_num[2][$digit==1? 1 : 0]; }
else{ $t.= $th_num[$n]; }
$t.= $th_digit[($digit==0 && $x>0 ? 6 : $digit )];
}else{
$t .= $th_digit[ $digit==0 && $x>0 ? 6 : 0 ];
}
}
return $t;
}
}
## วิธีใช้งาน
$x = new hk_baht( $b='10,000,021,654,321.50' );
echo $b . "=>" .$x->result;
echo '<br>', $b='10,000,011,000,321.25', "=>", $x->toBaht( $b );
echo '<br>', $b='10,000,000.00', "=>", $x->toBaht( $b );
echo '<br>', $b='1.1', "=>", $x->toBaht( $b );
echo '<br>', $b='1.11', "=>", $x->toBaht( $b );
echo '<br>', $b='1.1135', "=>", $x->toBaht( $b );
echo '<br>', $b='1.1167', "=>", $x->toBaht( $b );
echo '<br>', $b='1.11.1', "=>", $x->toBaht( $b );
?>
|
ประวัติการแก้ไข 2015-08-14 10:24:06
|
|
|
|
Date :
2015-08-14 10:23:33 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พอดีแอบมาหาข้อมูลเอาโค้ดไปใช้และแก้ไขเล็กๆ น้อยๆครับ เพิ่มเติมแก้พวกค่า 1-1.99 เอ็ดบาท เอ็ดสตางค์ และแก้ไขเพิ่มเติมค่าศูนย์บาทXXXสตางค์เพิ่มเข้าไปครับ
Code (PHP)
<?PHP
function m2t($number){
$number = number_format($number, 2, '.', '');
$numberx = $number;
$txtnum1 = array('ศูนย์','หนึ่ง','สอง','สาม','สี่','ห้า','หก','เจ็ด','แปด','เก้า','สิบ');
$txtnum2 = array('','สิบ','ร้อย','พัน','หมื่น','แสน','ล้าน','สิบ','ร้อย','พัน','หมื่น','แสน','ล้าน');
$number = str_replace(",","",$number);
$number = str_replace(" ","",$number);
$number = str_replace("บาท","",$number);
$number = explode(".",$number);
if(sizeof($number)>2){
return 'ทศนิยมหลายตัวนะจ๊ะ';
exit;
}
$strlen = strlen($number[0]);
$convert = '';
for($i=0;$i<$strlen;$i++){
$n = substr($number[0], $i,1);
if($n!=0){
if($i==($strlen-1) AND $n==1){ $convert .= 'เอ็ด'; }
elseif($i==($strlen-2) AND $n==2){ $convert .= 'ยี่'; }
elseif($i==($strlen-2) AND $n==1){ $convert .= ''; }
else{ $convert .= $txtnum1[$n]; }
$convert .= $txtnum2[$strlen-$i-1];
}
}
$convert .= 'บาท';
if($number[1]=='0' OR $number[1]=='00' OR
$number[1]==''){
$convert .= 'ถ้วน';
}else{
$strlen = strlen($number[1]);
for($i=0;$i<$strlen;$i++){
$n = substr($number[1], $i,1);
if($n!=0){
if($i==($strlen-1) AND $n==1){$convert
.= 'เอ็ด';}
elseif($i==($strlen-2) AND
$n==2){$convert .= 'ยี่';}
elseif($i==($strlen-2) AND
$n==1){$convert .= '';}
else{ $convert .= $txtnum1[$n];}
$convert .= $txtnum2[$strlen-$i-1];
}
}
$convert .= 'สตางค์';
}
//แก้ต่ำกว่า 1 บาท ให้แสดงคำว่าศูนย์ แก้ ศูนย์บาท
if($numberx < 1)
{
$convert = "ศูนย์" . $convert;
}
//แก้เอ็ดสตางค์
$len = strlen($numberx);
$lendot1 = $len - 2;
$lendot2 = $len - 1;
if(($numberx[$lendot1] == 0) && ($numberx[$lendot2] == 1))
{
$convert = substr($convert,0,-10);
$convert = $convert . "หนึ่งสตางค์";
}
//แก้เอ็ดบาท สำหรับค่า 1-1.99
if($numberx >= 1)
{
if($numberx < 2)
{
$convert = substr($convert,4);
$convert = "หนึ่ง" . $convert;
}
}
return $convert;
}
?>
|
|
|
|
|
Date :
2016-09-22 02:25:39 |
By :
mingpukja |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date :
2017-08-03 17:48:59 |
By :
xxxxxxxxx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ศูนย์บาท นี่ ทำยังไงครับ
|
|
|
|
|
Date :
2024-09-16 10:40:43 |
By :
Pt Wos |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|