Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 107,976

HOME > PHP > PHP Forum > php ฟังก์ชั่นแปลงค่าเงินตัวเลขเป็นตัวอักษร รองรับหลัก ล้านล้าน ประยุกต์มา



 

php ฟังก์ชั่นแปลงค่าเงินตัวเลขเป็นตัวอักษร รองรับหลัก ล้านล้าน ประยุกต์มา

 



Topic : 068746



โพสกระทู้ ( 106 )
บทความ ( 0 )



สถานะออฟไลน์




ขอบคุณต้นฉบับจาก 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







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-11-05 10:56:59 By : tongkamlekdee View : 17131 Reply : 16
 

 

No. 1



โพสกระทู้ ( 3,747 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์
Facebook

คุ้นๆแหะตัวนี้






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-05 12:19:01 By : Dragons_first
 


 

No. 2



โพสกระทู้ ( 74,031 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ผมไปเอามาจากไหนครับ มันหลายปีแล้ว 6-7 ปี
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-08 09:40:36 By : webmaster
 

 

No. 3

Guest


ขอบคุณมากๆๆๆครับ ^_^
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-18 06:02:27 By : มังกร
 


 

No. 4



โพสกระทู้ ( 14 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณมากๆ นะคร้า
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-10-27 19:59:19 By : muicom
 


 

No. 5

Guest


ไม่ไม่รองรับ

สิบเอ็ดล้าน
ยี่สิบเอ็ดล้าน

เป็นต้นครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-11-01 13:27:16 By : ิเบิร์ด
 


 

No. 6

Guest


ตัวนี้ใช้งานได้มากกว่า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  . "&nbsp;=&nbsp;" .Convert($num1),"<br>"; 
echo  $num2  . "&nbsp;=&nbsp;" .Convert($num2),"<br>"; 
?>

ผลที่ได้คือ
111111111111.11 = หนึ่งแสนหนึ่งหมื่นหนึ่งพันหนึ่งร้อยสิบเอ็ดล้านหนึ่งแสนหนึ่งหมื่นหนึ่งพันหนึ่งร้อยสิบเอ็ดบาทสิบเอ็ดสตางค์
222222222222.22 = สองแสนสองหมื่นสองพันสองร้อยยี่สิบสองล้านสองแสนสองหมื่นสองพันสองร้อยยี่สิบสองบาทยี่สิบสองสตางค์
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-01-14 04:15:10 By : ชาตรี
 


 

No. 7



โพสกระทู้ ( 1,576 )
บทความ ( 3 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


คุ้นๆๆเหมือนมีอยู่ในหนังสือเล่มหนึ่งตอนที่ผมหัด php ใหม่ๆเมื่อ 7ปีที่แล้ว 55555


ประวัติการแก้ไข
2015-01-14 21:57:07
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-01-14 21:56:19 By : somparn
 


 

No. 8



โพสกระทู้ ( 5,123 )
บทความ ( 26 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์


class นี้ตั้งแต่ thaidev ยังไม่เดี้ยงนู้นนนน คิดดูว่านานแค่ใหน ฮ่า
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-01-15 08:57:44 By : deawx
 


 

No. 9



โพสกระทู้ ( 7,993 )
บทความ ( 2 )



สถานะออฟไลน์


อันนี้เขียนเองชัวร์ ใช้งานอยู่ เป็นคลาส
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
 


 

No. 10



โพสกระทู้ ( 3,567 )
บทความ ( 8 )



สถานะออฟไลน์


เอามั่งๆ

http://okvee.net/th/web-resources/download/%E0%B9%81%E0%B8%9B%E0%B8%A5%E0%B8%87%E0%B8%95%E0%B8%B1%E0%B8%A7%E0%B9%80%E0%B8%A5%E0%B8%82%E0%B9%80%E0%B8%9B%E0%B9%87%E0%B8%99%E0%B8%95%E0%B8%B1%E0%B8%A7%E0%B8%AD%E0%B8%B1%E0%B8%81%E0%B8%A9%E0%B8%A3
หรือ
http://github.com/OkveeNet/number

Code (PHP)
require 'Okvee/Number/NumberThai.php';

$number_text = new Okvee\Number\NumberThai();

// convert number to Thai Baht.
echo $number_text->convertBaht('3.23');
// สามบาทยี่สิบสามสตางค์


ไม่จำกัดหน่วย ไม่จำกัดจำนวนสตางค์ เผื่อกรณีที่มีบางงานใช้เศษสตางค์หลายๆหน่วยก็อ่านได้


ประวัติการแก้ไข
2015-01-15 11:36:50
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-01-15 11:33:27 By : mr.v
 


 

No. 11

Guest


ตอบความคิดเห็นที่ : 9 เขียนโดย : Chaidhanan เมื่อวันที่ 2015-01-15 10:47:09
รายละเอียดของการตอบ ::
พี่ Chaidhanan ครับ คลาสนี้ ถ้าหากเป็นจำนวนเงิน 1,000,000 มันจะแสดงเป็น เอ็ดล้าน ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-04-04 12:06:45 By : WiTT
 


 

No. 12



โพสกระทู้ ( 7,993 )
บทความ ( 2 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 11 เขียนโดย : WiTT เมื่อวันที่ 2015-04-04 12:06:45
รายละเอียดของการตอบ ::
อุ๊ป ขอบคุณครับ แฮะๆ ยังไม่เคยเจอ เลขตัวกลมขนาดนั้น เดียวดู อัลกอฯ ใหม่


แก้ไขบันทัด 25 เพิ่มเติม
if( $n==1 ){ $t .= $digit==1? '' : $th_num[1][$digit==0? ($t? 1 : 0) : 0]; }


ประวัติการแก้ไข
2015-04-04 14:49:52
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-04-04 13:31:58 By : Chaidhanan
 


 

No. 13

Guest


ตอบความคิดเห็นที่ : 12 เขียนโดย : Chaidhanan เมื่อวันที่ 2015-04-04 13:31:58
รายละเอียดของการตอบ ::
ขอบคุณครับ พี่ Chaidhanan พอดีผมเอา class พี่ไปใช้แล้ว user เขาแจ้งมาผมก็เพิ่งเจอเหมือนกันครับ

และได้แก้จากโค้ดพี่

Code (PHP)
$t .= $digit==1? '' : $th_num[1][$digit==0? $x==6&&$ln==7?0:1 :0];


แต่ของพี่แก้ให้สั้นกว่าหน่ะ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-04-05 13:08:13 By : WiTT
 


 

No. 14



โพสกระทู้ ( 7,993 )
บทความ ( 2 )



สถานะออฟไลน์


ปรับปรุงเพิ่มเติม
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
 


 

No. 15



โพสกระทู้ ( 3 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

พอดีแอบมาหาข้อมูลเอาโค้ดไปใช้และแก้ไขเล็กๆ น้อยๆครับ เพิ่มเติมแก้พวกค่า 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
 


 

No. 16

Guest



แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-03 17:48:59 By : xxxxxxxxx
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : php ฟังก์ชั่นแปลงค่าเงินตัวเลขเป็นตัวอักษร รองรับหลัก ล้านล้าน ประยุกต์มา
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม

Load balance : Server 00
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2019 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 08-9968-0655 อัตราราคา คลิกที่นี่