พอดีทำใร VB.net แล้วแต่ก็ งง เลยอยากมองในมุม PHP บ้าง
เอาง่ายๆ ไม่เกิน 1-9999 พอครับ
เช่น กรอกตัวเลขลง textbox 123 ลงไป แปลงออกมา จะได้label "หนึ่งร้อยสิบสาม"
ผม say : เอา ใน vb.net มาดู แล้วจะบอก
(ส่วนนี่คือ code ของเขานะ)
Dim num = tbinput.Text If (num >= 9999 & num = 0) Then lboutput.Text = "In put Number 1 - 9999 Only" Else Dim i As Integer, max As Integer, r As String, n As String, Result As String num = Trim(Str(Val(num))) max = Len(num) For i = 1 To max r = Choose(((max - i + 1) Mod 6) + 1, "", "", "สิบ", "ร้อย", "พัน") n = Choose(Mid(num, i, 1) + 1, "ศูนย์", "หนึ่ง", "สอง", "สาม", "สี่", "ห้า", "หก", "เจ็ด", "แปด", "เก้า") If r = "สิบ" And n = "หนึ่ง" Then n = "" If n = "หนึ่ง" And r = "" And max <> 1 Then n = "เอ็ด" If i = 1 And n = "เอ็ด" And max > 1 Then n = "หนึ่ง" If r = "สิบ" And n = "สอง" Then n = "ยี่" If r = "" And max - i + 1 > 6 Then r = "" If n <> "ศูนย์" Then Result = Result & n & r End If Next lboutput.Text = Result End If
บอกตรงๆ ผมมองไม่รู้เรื่องหรอก (แต่เหมือน if จะเยอะจัง - -'')
ก็เลยเขียนเป็น php ในแบบ ที่ตัวเองถนัดมากกว่า
'ล้าน',
'100000' => 'แสน',
'10000' => 'หมื่น',
'1000' => 'พัน',
'100' => 'ร้อย',
'10' => 'สิบ',
'1' => '',
);
$num2TH_Word_1 = array(
'1' => 'หนึ่ง',
'2' => 'สอง',
'3' => 'สาม',
'4' => 'สี่',
'5' => 'ห้า',
'6' => 'หก',
'7' => 'เจ็ด',
'8' => 'แปด',
'9' => 'เก้า',
);
$num2TH_Word_2 = array(
'1' => 'เอ็ด',
'2' => 'ยี่',
);
foreach($num2TH_Word as $x=>$y){
$tmp = floor($input/$x);
if($tmp>=1){
if(($tmp==1) && ($x==10))$return .= $y;
elseif(($tmp==2) && ($x==10))$return .= $num2TH_Word_2[($input/$x)].$y;
elseif(($input==1) && ($x==1))$return .= $num2TH_Word_2[($input/$x)];
else $return .= $num2TH_Word_1[($input/$x)].$y;
$input = ($input%$x);
}
}
return $return;
}
function is_valid_num($num){
return is_numeric($num) && ($num >= 0) && (floor($num) == $num);
}
?>
ผลลัพท์ ก็
http://localhost/php.php?num=5121221 ห้าล้านหนึ่งแสนสองหมื่นหนึ่งพันสองร้อยยี่สิบเอ็ด
No comments:
Post a Comment