Jump to content


- - - - -

[php] Nombor Ke Perkataan?


17 replies to this topic

#1 Guest_xpired_*

  • Tetamu

Posted 21 June 2004 - 03:20 PM

Assalamualaikum...

Nak minta tolong boleh tak? sesiapa tahu camne nak tukar nombor dalam bentuk teks? cthnya

Nombor : 231.10
Teks : Dua Ratus Tiga Puluh Satu Dan Sepuluh

Yang biasa diaorang letak kat bahagian bawah invois tu....

sesiapa sudi persilakan tampil... kepala nie dah berat dah... tak leh pikir ligat lagi dah... anyone??? pleaseeee.....(magic word)

#2 bestofel

    Leftenan

  • Pengendali
  • 1,101 posts
  • Gender:Male
  • Location:Serdang, Selangor
  • Interests:Multimedia + Digital Art + Web application + Mobile application + ICT in agricultural R&D
  • Kepakaran:PHP web application, website / portal, Multimedia Design, Android App Development, iPhone/iPad App Development
  • Freelance:Tidak

Posted 21 June 2004 - 03:33 PM

Buat je camni:
CODE
switch($nombor)
{
    case "1": teks="satu";break;
    case "2" : teks="dua";break;
    case "3" : teks="tiga";break;
//dan seterusnya...
    default: break;
}

Tapi utk 0 tu jadi puluh..ratus..etc tu..tak terfikir lagi. Hehe..sorri..

#3 k4ml

    Leftenan Muda

  • Ahli Professional
  • 834 posts
  • Location:KB
  • Kepakaran:Linux, Freebsd, PHP, Drupal, PostgreSQL
  • Freelance:Ya

Posted 21 June 2004 - 03:43 PM

mungkin boleh count digit nombor tu. kalau 3 sudah tentu ratus ... so suffix after first number must be ratus ... and so on. idea sepintas lalu ... smile.gif

#4 Guest_xpired_*

  • Tetamu

Posted 21 June 2004 - 04:03 PM

tapi mesti ingat bahawa no 10 hingga ke 19 dah guna perkataan sendiri... iaitu "Sepuluh", "Sebelas"..... takkan nak buat case sampai 99????

had nombor hanya sampai 19 juta sahaja... jadi kalau :

No : 4,503,238.56
Teks : Empat Juta Lima Ratus Tiga Ribu Dua Ratus Tiga Puluh Lapan Dan Lima Puluh Enam

#5 bestofel

    Leftenan

  • Pengendali
  • 1,101 posts
  • Gender:Male
  • Location:Serdang, Selangor
  • Interests:Multimedia + Digital Art + Web application + Mobile application + ICT in agricultural R&D
  • Kepakaran:PHP web application, website / portal, Multimedia Design, Android App Development, iPhone/iPad App Development
  • Freelance:Tidak

Posted 21 June 2004 - 04:48 PM

'comma' tu rasanya boleh digunakan..explodekan selepas 'dot' = puluh˛, sebelum 1st 'comma', ratus˛, 2nd sebelum 'comma' pulak ribu˛, 3rd sebelum 'comma' lak juta˛.. Tah lerr..tak de idea melintang masuk lagi...

#6 kureng

    Leftenan

  • Ahli
  • 1,480 posts
  • Gender:Male
  • Location:di tempat itu
  • Interests:Kebarangkalian, ramai, rileks-lepak, $$$ dan lain-lain
  • Kepakaran:Copy & Paste
  • Freelance:Tidak

Posted 21 June 2004 - 04:54 PM

cube try test yg ni..

kalo nak la...

#7 Guest_ucin_*

  • Tetamu

Posted 21 June 2004 - 05:16 PM

algorithm aje harap boleh perfectkan lagi:

Katalah ko ade nombo ni

3340

Apa kata mula mula kite letakkan angka2 ni dalam array kite namakan die num:

so:

$num[0]=3
$num[1]=3
$num[2]=4
$num[3]=0

Then kite count size array kite dapat 4 so type dia ialah ribu
amik item 1 tu and simpan dalam variable(maybe another array pastu nanti boleh guna function array append) lain dengan type die so nanti kite akan dapat 3 ribu

Pastu kite delete item yg pertama:

kite ada

$num[1]=3
$num[2]=4
$num[3]=0

Kite count lagi.Ada 3 so type die ialah ratus.Kite simpan item index 1 tu and kite dapat 3 ratus(append dalam array yg kite dah simpan nilai 3 ribu tu)

and so on...

Aku rasa boleh buat recursive function ni and hapuskan array tu one by one and generate teks die yg akan dimpan dalam array yg lain gak....

Hopefuly korang paham le maksud aku nih ek...

#8 Guest_aku_azhar_*

  • Tetamu

Posted 22 June 2004 - 11:52 AM

hi xpired
aku dah buat dah coding untuk proses tukar nombor ker perkataan ni untuk projek baucer aku
dengan murah hati aku bagi koding nyer terus untuk ko ngan ittutorian yang lain
lagipon banyak input yang aku dapat ngan belaja kat sini
gunakanlah dengan sebaiknya
majulah php untuk negara

p/s:koding ni panjang skit la..hehehe...aku buat ikut logik jer, maybe boleh diperbaiki oleh yang lain

ada 2 fail : index.html / proses_ringgit_malaysia.php (full source kod, copy jekk)

QUOTE
Version : 2.1
(aku dah upgrade skit)

index.html
QUOTE
<html>
<head>
<title>Ringgit Malaysia</title>
<script language='Javascript'>
function nombor(TheWin)
{
if((TheWin.event.keyCode >= 48 && TheWin.event.keyCode <= 57) ||
(TheWin.event.keyCode >= 96 && TheWin.event.keyCode <= 105) ||
(TheWin.event.keyCode >= 37 && TheWin.event.keyCode <= 40) ||
TheWin.event.keyCode == 110 ||
TheWin.event.keyCode == 13 ||
TheWin.event.keyCode == 46 ||
TheWin.event.keyCode == 8 ||
TheWin.event.keyCode == 9 ||
TheWin.event.keyCode == 190)
{
  TheWin.event.returnValue=true;
}
else
{
  //alert(TheWin.event.keyCode);
  TheWin.event.returnValue=false;
}
}

function semak(ini,jenis)
{
//alert();
if(jenis == 1)
{
  if(ini.value == "0")
  { ini.value = ""; }
  else
  { return true; }
}
if(jenis == 2)
{
  if(ini.value == "")
  { ini.value = "0"; }
  else
  { return true; }
}
}
</script>
</head>
<body>
<form name="rm" method="post" action="proses_ringgit_malaysia.php">
RM <input name="nilai_ringgit" type="text" dir="rtl" value="0" size="10" maxlength="6" onKeyDown="nombor(self);" onFocus="semak(this,1);" onBlur="semak(this,2);">
<strong> . </strong>
<input name="nilai_sen" type="text" dir="rtl" value="0" size="5" maxlength="2" onFocus="semak(this,1);" onBlur="semak(this,2);">
<input type="submit" name="submit" value="Submit">
<input type="reset" name="Reset" value="Reset">
<br>Tidak melebihi RM 999,999.99
</form>
</body>
</html>


proses_ringgit_malaysia.php
QUOTE
<?php
// ambil nilai dari submit
$nilai_ringgit = trim($_POST['nilai_ringgit']);
$nilai_sen = trim($_POST['nilai_sen']);

if($nilai_ringgit == "" || $nilai_ringgit == NULL) { $nilai_ringgit = 0; }
if($nilai_sen == "" || $nilai_sen == NULL) { $nilai_sen = 0; }
$nilai = $nilai_ringgit.".".$nilai_sen;
?>

<?php
// umpukkan nilai yang akan diproses
$nilai = $nilai;
// isytihar nilai kepada format ringgit malaysia
$nilai_array = array();
$nilai_array[1] = sprintf("%01.2f", $nilai); // 1234.00
$nilai_array[2] = number_format($nilai_array[1], 2); // 1,234.00
$panjang_nilai_array = strlen($nilai_array[2]);

// tukar dan umpuk nilai ringgit (nombor) jadi perkataan
$ringgit_sahaja = substr($nilai_array[1], 0, strlen($nilai_array[1])-3);
$panjang_ringgit = strlen($ringgit_sahaja);
$ringgit_array = array();
for($i=0; $i<$panjang_ringgit; $i++)
{
$temp = substr($ringgit_sahaja, (0-1-$i), 1);
$ringgit_array[$i] = semakan_data_nilai($temp);
}

// tukar dan umpuk nilai sen (nombor) jadi perkataan
$sen_sahaja = substr($nilai_array[2], -2);
$panjang_sen = strlen($sen_sahaja);
$sen_array = array();
for($i=0; $i<2; $i++)
{
$temp = substr($sen_sahaja, $i, 1);
$sen_array[$i] = semakan_data_nilai($temp);
}

// baca nilai ringgit (data nombor)
$nombor_ringgit = array();
for($i=1; $i<=6; $i++)
{
$nombor_ringgit[$i] = substr($ringgit_sahaja, -$i, 1);
}

// terjemahkan data nilai ringgit @ semak dengan data nombor
$ayat_ringgit = array();

if($panjang_ringgit == 0) // #.00
{ $ayat_ringgit[1] = ""; }

if($panjang_ringgit >= 1) // 1.00
{
if($nombor_ringgit[1] == 0)
{ $ayat_ringgit[1] = ""; }
else
{ $ayat_ringgit[1] = "$ringgit_array[0]"; }
$ayat_ringgit_format = $ayat_ringgit[1];
}

if($panjang_ringgit >= 2) // 1#.00
{
if($nombor_ringgit[2] == 0)
{ $ayat_ringgit[2] = $ayat_ringgit[1]; }
elseif($nombor_ringgit[2] == 1 && $nombor_ringgit[1] == 0)
{ $ayat_ringgit[2] = "Sepuluh"; }
elseif($nombor_ringgit[2] == 1 && $nombor_ringgit[1] == 1)
{ $ayat_ringgit[2] = "Sebelas"; }
elseif($nombor_ringgit[2] == 1)
{ $ayat_ringgit[2] = "$ringgit_array[0] Belas"; }
elseif($nombor_ringgit[1] == 0)
{ $ayat_ringgit[2] = "$ringgit_array[1] Puluh"; }
else
{ $ayat_ringgit[2] = "$ringgit_array[1] Puluh $ringgit_array[0]"; }
$ayat_ringgit_format = $ayat_ringgit[2];
}

if($panjang_ringgit >= 3) // 1##.00
{
if($nombor_ringgit[3] == 0)
{ $ayat_ringgit[3] = $ayat_ringgit[2]; }
elseif($nombor_ringgit[3] == 1)
{ $ayat_ringgit[3] = "Seratus $ayat_ringgit[2]"; }
else
{ $ayat_ringgit[3] = "$ringgit_array[2] Ratus $ayat_ringgit[2]"; }
$ayat_ringgit_format = $ayat_ringgit[3];
}

if($panjang_ringgit >= 4) // 1###.00 @ 1,###.00
{
if($nombor_ringgit[4] == 0)
{ $ayat_ringgit[4] = $ayat_ringgit[3]; }
elseif($nombor_ringgit[4] == 1)
{ $ayat_ringgit[4] = "Seribu $ayat_ringgit[3]"; }
else
{ $ayat_ringgit[4] = "$ringgit_array[3] Ribu $ayat_ringgit[3]"; }
$ayat_ringgit_format = $ayat_ringgit[4];
}

if($panjang_ringgit >= 5) // 1####.00 @ 1#,###.00
{
if($nombor_ringgit[5] == 0)
{ $ayat_ringgit[5] = $ayat_ringgit[4]; }
elseif($nombor_ringgit[5] == 1 && $nom_temp4 == 0)
{ $ayat_ringgit[5] = "Sepuluh Ribu $ayat_ringgit[3]"; }
elseif($nombor_ringgit[5] == 1 && $nom_temp4 == 1)
{ $ayat_ringgit[5] = "Sebelas Ribu $ayat_ringgit[3]"; }
elseif($nombor_ringgit[5] == 1)
{ $ayat_ringgit[5] = "$ringgit_array[3] Belas Ribu $ayat_ringgit[3]"; }
elseif($nombor_ringgit[4] == 0)
{ $ayat_ringgit[5] = "$ringgit_array[4] Puluh Ribu $ayat_ringgit[3]"; }
else
{ $ayat_ringgit[5] = "$ringgit_array[4] Puluh $ringgit_array[3] Ribu $ayat_ringgit[3]"; }
$ayat_ringgit_format = $ayat_ringgit[5];
}

if($panjang_ringgit == 6) // 1#####.00 @ 1##,###.00
{
if($nombor_ringgit[6] == 1)
{ $ayat_ringgit[6] = "Seratus $ayat_ringgit[5]"; }
else
{ $ayat_ringgit[6] = "$ringgit_array[5] Ratus $ayat_ringgit[5]"; }
$ayat_ringgit_format = $ayat_ringgit[6];
}

// terjemahkan data nilai sen @ semak dengan data perkataan
if($sen_array[0] == "Kosong" && $sen_array[1] == "Kosong")
{ $ayat_sen = ""; }
elseif($sen_array[0] == "Satu" && $sen_array[1] != "Kosong")
{ $ayat_sen = "$sen_array[1] Belas Sen"; }
elseif($sen_array[0] != "Kosong" && $sen_array[1] != "Kosong")
{ $ayat_sen = "$sen_array[0] Puluh $sen_array[1] Sen"; }
elseif($sen_array[0] == "Kosong")
{ $ayat_sen = "$sen_array[1] Sen"; }
elseif($sen_array[1] == "Kosong" && $sen_array[0] == "Satu")
{ $ayat_sen = "Sepuluh Sen"; }
elseif($sen_array[1] == "Kosong" && $sen_array[0] != "Satu")
{ $ayat_sen = "$sen_array[0] Puluh Sen"; }
$ayat_sen_format = $ayat_sen;

// gabungkan nilai ringgit malaysia
if(($ayat_ringgit_format != "" || $ayat_ringgit_format != NULL) && ($ayat_sen_format != "" || $ayat_sen_format != NULL))
{ $ringgit_malaysia = "$ayat_ringgit_format Dan $ayat_sen_format Sahaja"; }
elseif(($ayat_ringgit_format != "" || $ayat_ringgit_format != NULL) && ($ayat_sen_format == "" || $ayat_sen_format == NULL))
{ $ringgit_malaysia = "$ayat_ringgit_format Sahaja"; }
elseif(($ayat_ringgit_format == "" || $ayat_ringgit_format == NULL) && ($ayat_sen_format != "" || $ayat_sen_format != NULL))
{ $ringgit_malaysia = "$ayat_sen_format Sahaja"; }
elseif(($ayat_ringgit_format == "" || $ayat_ringgit_format == NULL) && ($ayat_sen_format == "" || $ayat_sen_format == NULL))
{ $ringgit_malaysia = "Tiada"; }

print "RM = $nilai_array[2]<br>";
echo "<br><strong><font size=\"5\">Ringgit : <font color=\"#FF0000\">
$ringgit_malaysia</font></font></strong>";

function semakan_data_nilai($temp) // tukarkan data nombor kepada data perkataan
{
if($temp == ".")
{ $data = "Titik"; }
elseif($temp == 0)
{ $data = "Kosong"; }
elseif($temp == 1)
{ $data = "Satu"; }
elseif($temp == 2)
{ $data = "Dua"; }
elseif($temp == 3)
{ $data = "Tiga"; }
elseif($temp == 4)
{ $data = "Empat"; }
elseif($temp == 5)
{ $data = "Lima"; }
elseif($temp == 6)
{ $data = "Enam"; }
elseif($temp == 7)
{ $data = "Tujuh"; }
elseif($temp == 8)
{ $data = "Lapan"; }
elseif($temp == 9)
{ $data = "Sembilan"; }
return $data;
}
?>

Edited by Khairil Azhar, 22 June 2004 - 11:53 AM.


#9 Guest_aku_azhar_*

  • Tetamu

Posted 22 June 2004 - 11:55 AM

sorrylah kengkawan
aku dah hadkan sampai RM 999,999.99 sahaja
kalau nak masuk input sejuta atau lebih, kene tambah koding la
thanks

#10 aftersyok

    Pegawai Waran 2

  • Ahli
  • 430 posts
  • Gender:Male
  • Location:malaysia
  • Interests:web design, web programming, web security, graphic and multimedia, computer gaming, learning new things.
  • Kepakaran:Web Design, Web Based Application Dev, Graphic Design, PHP, Classic ASP, ColdFusion
  • Freelance:Ya

Posted 22 June 2004 - 12:46 PM

Yang ini aku punya version ( dalam PHP ).Sepanjang pagi nie aku buat. Aku rasa teringin pulak nak cuba buat sebab rasa macam mencabar jek. Rasanya macam working , tapi tak sempat pulak nak check bug. ok, selamat mencuba.

QUOTE
<?php

//masukkan baris di bawah ini jika anda ingin gunakan kod aturcara ini dalam aplikasi anda
// [ Number To Text Functions ][ author: adli@aftersyok.com  ] [ 22/06/04 ]

//NOTE : BERFUNGSI BILA ADA NOMBOR DIBERI ADA KOMA SAHAJA. MEMERIKSA HINGGA RATUS JUTA SAHAJA

//nombor untuk ujian (statik)
$num = "12,103,238.56";

//papar nombor yang diuji
echo "Nombor : " .$num ."<br>";

//asingkan nombor dalam perpuluhan. num1(nombor sebelum perpuluhan), num2(nombor lepas perpuluhan)
$number = explode(".",$num);
$num1 = $number[0];
$num2 = $number[1];

//pisahkan bahagisan nombor pertama kepada array
$num1Pieces = explode(",",$num1);
$juta = "";
$ribu = "" ;
$ratus = "";

//SWICTH PERTAMA UNTUK PAPAR NILAI SEBELUM PERPULUHAN
switch ( count($num1Pieces) ){
        //3 item dalam array terhasil jika nombor dalam juta
        case 3:
              $juta = stripEarlyZeroes($num1Pieces[0]);
              if ( $juta != "0" ){
                  $juta = getHundred($juta) ." juta ";
              }
              $ribu = stripEarlyZeroes($num1Pieces[1]);
              if ( $ribu != "0" ){
                  $ribu = getHundred($ribu) ." ribu ";
              }
              $ratus = stripEarlyZeroes($num1Pieces[2]);
              if ( $ratus != "0" ){
                  $ratus = getHundred($ratus);
              }
              //papar hasil penukaran
              echo $juta .$ribu .$ratus;
              break;
        case 2:
              $ribu = stripEarlyZeroes($num1Pieces[0]);
              if ( $ribu != "0" ){
                  $ribu = getHundred($ribu) ." ribu ";
              }
              $ratus = stripEarlyZeroes($num1Pieces[1]);
              if ( $ratus != "0" ){
                  $ratus = getHundred($ratus);
              }
              //papar hasil penukaran
              echo $ribu .$ratus;
              break;
        case 1:
              $ratus = stripEarlyZeroes($num1Pieces[0]);
              if ( $ratus != "0" ){
                  $ratus = getHundred($ratus);
              }
              //papar hasil penukaran
              echo $ratus;
              break;

}

//PAPAR NILAI UNTUK NOMBOR PERPULUHAN PULAK
$perpuluhan = stripEarlyZeroes($num2);
$perpuluhan = getHundred($perpuluhan);
//papar nilai
echo " dan " .$perpuluhan;

//#DEBUGGING FUNCTION CALL
//echo getHundred("0");
//toText(0);
//echo stripEarlyZeroes("000");


//#FUNGSI-FUNGSI PEMBANTU

//fungsi untuk buang nombor kosong yang muncul sebelum sebarang bukan-kosong
//001 will turn 1
//023 will turn 23
function stripEarlyZeroes($num){
        //echo "yeye";
        for ( $i=0;$i<strlen($num);$i++){
            if (  (substr($num,0,1) == 0) || (substr($num,0,1) == "0"  ) )  {
                $num = substr($num,1,3);
            }else{
                return $num;
            }
        }
        return $num;
}

//fungsi yang mengembalikan nombor ratus yang diberi kepada teks
//return text for up to 3 digit number. ( boleh di"optimizekan lagi". )
function getHundred($num){
        //below is debug purpose
        //echo "<br>nombor:" .$num ."<br>";

        //initiate blank values
        $ratus = "";
        $puluh = "";
        $sa = "";

        //jika nombor 3 digit
        if (strlen($num) == 3){

            //tukarkan kepada teks
            $ratus = toText( substr($num,0,1 ) );
            $puluh = toText( substr($num,1,1) );
            $sa = toText( substr($num,2,1) );

            //khas untuk nombor belasan dan sepuluh
            //number end checking
            if ( $puluh == "satu" ){
                  if ( $sa == "satu"  ){
                        return $ratus ." ratus " ."sebelas";
                  }
                  if ( $sa == ""  ){
                        return $ratus ." ratus " ."sepuluh";
                  }
                  return $ratus ." ratus " .$sa ." belas" ;
            }

            //jika nombor pertengahan adalah kosong papar ratus dan sa jek
            //zero middle number checking
            if ( $puluh == "" ){
                  return $ratus ." ratus " .$sa;
            }

            return $ratus ." ratus " .$puluh ." puluh " .$sa;
        }

        if (strlen($num) == 2){
            $puluh = toText( substr($num,0,1) );
            $sa = toText( substr($num,1,1) );
            //number end checking
            if ( $puluh == "satu" ){
                  if ( $sa == "satu"  ){
                        return "sebelas";
                  }
                  if ( $sa == ""  ){
                        return "sepuluh";
                  }
                  return $sa ." belas" ;
            }
            return $puluh ." puluh " .$sa;
        }

        if (strlen($num) == 1){
            $sa = toText( substr($num,0,1) );
            return $sa;
        }

}

//fungsi untuk penterjemahan terus nombor ke teks
//return teks of number supplied
function toText($num){
        $teks = ",satu,dua,tiga,empat,lima,enam,tujuh,lapan,sembilan";
        $teksArray = explode(",",$teks);
        return $teksArray[$num];
}

?>


#11 Guest_aku_azhar_*

  • Tetamu

Posted 22 June 2004 - 01:07 PM

cayalah aftersyok
koding ko lagi kemas dan teratur la
cayalah
hidup php

thanks all

Edited by Khairil Azhar, 22 June 2004 - 01:07 PM.


#12 aftersyok

    Pegawai Waran 2

  • Ahli
  • 430 posts
  • Gender:Male
  • Location:malaysia
  • Interests:web design, web programming, web security, graphic and multimedia, computer gaming, learning new things.
  • Kepakaran:Web Design, Web Based Application Dev, Graphic Design, PHP, Classic ASP, ColdFusion
  • Freelance:Ya

Posted 22 June 2004 - 01:12 PM

mekasih. aku dah lama tak buat programming nie. dah lama tak rasa adrenalin aku mengalir membuak-buak cam nie. anyway, azhar, kau punya validating script kat form tu, kira gempak jugak la. yea... idup php!

#13 mbek

    Leftenan Muda

  • Ahli
  • 785 posts
  • Gender:Male
  • Location:muwo
  • Interests:hehehehee
  • Kepakaran:Web Development (perl+php+mysql...)
  • Freelance:Ya

Posted 22 June 2004 - 01:26 PM

go coder go.....

#14 Guest_xpired_*

  • Tetamu

Posted 22 June 2004 - 02:15 PM

Thanks pada sumer yang bagi kod tu... anyway dah dapat sindiri dah... smile.gif otak dah ok...

input.php
QUOTE
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form name="form1" method="post" action="jawapan.php">
  <input name="no" type="text" id="no">
  <input type="submit" name="Submit" value="Submit">
</form>

</body>
</html>


jawapan.php
CODE
<?
function text_number($nombor) {
    $pecah = explode(".",number_format($nombor,2));
    $ringgit = str_replace(",","",$pecah[0]);
    $sen = $pecah[1][0] . $pecah[1][1];
    
    echo number_format($nombor,2) . "<br>";
    $check = $ringgit / 1000000;
    $baki = $ringgit % 1000000;
    
    if($check > 1) {
 $ringgit = $ringgit - $baki;
 $jumlah = $ringgit / 1000000;
 
 $teks = number_teks($jumlah) . " Juta ";
    }
    
    $ratus_ribu_c = $baki / 1000;
    $ratus_ribu = $baki % 1000;
    
    if($ratus_ribu_c > 1) {
 $genap = $baki - $ratus_ribu;
 $jum = $genap / 1000;
 
 //---------- Ratus Ribu ------------------
 $jum1 = $jum / 100;
 $jum2 = $jum % 100;
 
 if($jum1 > 1) {
     $jum1 = ($jum - $jum2 ) / 100;
     $teks = $teks . number_teks($jum1) . " Ratus";
 }
 
 if($jum2 < 20) {
     $teks = $teks . " " . number_teks($jum2);
 } else {
     $jum3 = $jum2 % 10;
     $jum4 = ($jum2 - $jum3) / 10;
     $teks = $teks . " " . number_teks($jum4) . " Puluh " . number_teks($jum3);
 }
 $teks = $teks . " Ribu ";
    }
    
    //------ Ratus Plak ---------------
 $jum1 = $ratus_ribu / 100;
 $jum2 = $ratus_ribu % 100;
 
 if($jum1 > 1) {
     $jum1 = ($ratus_ribu - $jum2 ) / 100;
     $teks = $teks . number_teks($jum1) . " Ratus";
 }
 
 if($jum2 < 20) {
     $teks = $teks . " " . number_teks($jum2);
 } else {
     $jum3 = $jum2 % 10;
     $jum4 = ($jum2 - $jum3) / 10;
     $teks = $teks . " " . number_teks($jum4) . " Puluh " . number_teks($jum3);
 }
    
    if($sen != 0) {
 if($sen < 20) {
     $sen_teks = number_teks($sen);
 } else {
     $sen_teks_1 = number_teks($sen[0]);
     $sen_teks_2 = number_teks($sen[1]);
     $sen_teks = $sen_teks_1 . " Puluh " . $sen_teks_2;
 }
 $teks = $teks . " Dan Sen " . $sen_teks . " Sahaja";
    } else {
 $teks = $teks . " Sahaja";
    }
    return $teks;
}

function number_teks($nombor) {
    switch ($nombor) {
 case 1 : return "Satu"; break;
 case 2 : return "Dua"; break;
 case 3 : return "Tiga"; break;
 case 4 : return "Empat"; break;
 case 5 : return "Lima"; break;
 case 6 : return "Enam"; break;
 case 7 : return "Tujuh"; break;
 case 8 : return "Lapan"; break;
 case 9 : return "Sembilan"; break;
 case 10 : return "Sepuluh"; break;
 case 11 : return "Sebelas"; break;
 case 12 : return "Dua Belas"; break;
 case 13 : return "Tiga Belas"; break;
 case 14 : return "Empat Belas"; break;
 case 15 : return "Lima Belas"; break;
 case 16 : return "Enam Belas"; break;
 case 17 : return "Tujuh Belas"; break;
 case 18 : return "Lapan Belas"; break;
 case 19 : return "Sembilan Belas"; break;
 default : return "";
    }
}

echo "Ringgit Malaysia " . text_number($no);
?>


Cubalah... had nombor 19999999.99 dan berasal dari no yang tiada koma....

selamat mencuba...

#15 aftersyok

    Pegawai Waran 2

  • Ahli
  • 430 posts
  • Gender:Male
  • Location:malaysia
  • Interests:web design, web programming, web security, graphic and multimedia, computer gaming, learning new things.
  • Kepakaran:Web Design, Web Based Application Dev, Graphic Design, PHP, Classic ASP, ColdFusion
  • Freelance:Ya

Posted 22 June 2004 - 02:59 PM

habis tu, kalau 999 999 999.99 ...???

#16 Guest_xpired_*

  • Tetamu

Posted 22 June 2004 - 03:04 PM

memandangkan sistem yang nak dibuat hanya had claim 3 juta saja, jadi saya nak buat lebih dari 19 juta tak berapa penting... buat rugi line program jer...

kalau nak rasanya korang boleh pikir camne nak buat... tapi pikir balik..... berguna ke tidak... kalau tak... baik abaikan jer...

#17 aftersyok

    Pegawai Waran 2

  • Ahli
  • 430 posts
  • Gender:Male
  • Location:malaysia
  • Interests:web design, web programming, web security, graphic and multimedia, computer gaming, learning new things.
  • Kepakaran:Web Design, Web Based Application Dev, Graphic Design, PHP, Classic ASP, ColdFusion
  • Freelance:Ya

Posted 22 June 2004 - 03:12 PM

i see. kalau macam tu, i have no more comments. laugh.gif

#18 efaisal

    Sarjan Mejar

  • Ahli
  • 258 posts

Posted 23 June 2004 - 12:09 PM

Ni aku punya PHP version, tested guna PHP 4.3.3. Cara nak guna ada dalam comment. Just to show different approach to same problem smile.gif Kedua-dua function return false kalau ada problem, jadi boleh buat error handling sendiri.

CODE
<?php

error_reporting(E_ALL);

/**
* Dapatkan teks gandaan, fungsi pembantu
*
*                                  | belas/ |       |      |      |         |
*                               sa | puluh  | ratus | ribu | juta | billion | trillion
*                              --------------------------------------------------------
* 2^0  =    1 0000000000001 <=  x  |        |       |      |      |         |
* 2^1  =    2 0000000000010 <=     |   x    |       |      |      |         |
* 2^2  =    4 0000000000100 <=     |        |   x   |      |      |         |
* 2^3  =    8 0000000001000 <=     |        |       |   x  |      |         |
* 2^4  =   16 0000000010000 <=     |   x    |       |   x  |      |         |
* 2^5  =   32 0000000100000 <=     |        |   x   |   x  |      |         |
* 2^6  =   64 0000001000000 <=     |        |       |      |   x  |         |
* 2^7  =  128 0000010000000 <=     |   x    |       |      |   x  |         |
* 2^8  =  256 0000100000000 <=     |        |   x   |      |   x  |         |
* 2^9  =  512 0001000000000 <=     |        |       |      |      |    x    |
* 2^10 = 1024 0010000000000 <=     |   x    |       |      |      |    x    |
* 2^11 = 2048 0100000000000 <=     |        |   x   |      |      |    x    |
* 2^12 = 4086 1000000000000 <=     |        |       |      |      |         |     x
* Di sini kita boleh buat 'mapping' menggunakan 'bitwise operation'.
*
* @param integer $ganda    Input integer dari 0 hingga 12.
* @return mixed            Perkataan gandaan (string) atau false jika operasi
*                          gagal.
* @access public
*/
function gandaan($ganda) {
   /* Masukkan matriks diatas kedalam tatasusunan */
   $gandaan = array(
                    'sa' => 1,
                    'puluh' => 2 | 16 | 128 | 1024,
                    'ratus' => 4 | 32 | 256 | 2048,
                    'ribu' => 8 | 16 | 32,
                    'juta' => 64 | 128 | 256,
                    'billion' => 512 | 1024 | 2048,
                    'trillion' => 4096
                   );
   if (is_integer($ganda)) {
       foreach ($gandaan as $key => $val) {
           if (pow(2, $ganda) & $val) {
               return $key;
           }
       }
   }

   return false;
}

/**
* Terjemah nombor kepada teks
*
* Teori:
* Mengenang kembali Bahasa Melayu dan Ilmu Hisab yang yang dipelajari semasa
* SRP atau SPM.
* - Struktur ayat (Bahasa Melayu):
*   -> Nombor dari kosong sehingga sembilan: letak dalam array $nom
*   -> Gandaan, contohnya puluh, ratus, ribu, puluh ribu, ratus ribu: dapat dari
*      fungsi pembantu gandaan()
*   -> Tetapi nombor 10 hingga 19 adalah unik sebab 10 ialah sepuluh dan yang
*      lain ada perkataan belas - sebelas, dua belas dan sebagainya
*
* - Struktur nombor (Ilmu Hisab):
*   -> Nombor 12345.67 boleh diuraikan kepada:
*      (1*10^4)+(2*10^3)+(3*10^2)+(4*10^1)+(5*10^0)+(6*10^-1)+(7*10^-2)
*
* @param string $nombor         Nombor yang hendak diterjemah kepada teks.
*                               Terima input string tetapi mesti nombor. Jika
*                               ada perpuluhan mesti 2 angka perpuluhan.
* @return mixed                 Teks yang diterjemah (string), atau false jika
*                               operasi gagal.
* @access public
*/
function nomborKeTeks($nombor) {
   if (is_numeric($nombor) && preg_match("/^\d*(\.\d{2})?$/", $nombor)) {
       $nom = array(
                    0 => "",
                    1 => "satu",
                    2 => "dua",
                    3 => "tiga",
                    4 => "empat",
                    5 => "lima",
                    6 => "enam",
                    7 => "tujuh",
                    8 => "lapan",
                    9 => "sembilan"
                   );

       $nomarr = array();
       $teks = '';
       if (preg_match("/\./", $nombor)) {
           $nomarr = explode('.', $nombor);
       } else {
           $nomarr[] = $nombor;
       }
       

       foreach ($nomarr as $key => $val) {
           if ($key > 0) { $teks .= " dan"; }
           $nombor = (int) $val;
           $ganda = floor(log10($nombor));
           if (is_finite($ganda) && ($tmp = gandaan((int) $ganda))) {
               if ($tmp === 'sa') { $tmp = ''; }
               $angka = (int) floor($nombor / pow(10, $ganda));
               /* Proses khas untuk 10 - 19 */
               if (($tmp === 'puluh') && ($angka === 1)) {
                   $nombor = (int) ($nombor - ($angka * pow(10, $ganda)));
                   $tmpganda = floor(log10($nombor));
                   if (($ganda  - $tmpganda) > 1) { /* Untuk 10 */
                       $tmp = gandaan((int) $ganda - 1);
                       if ($tmp === 'sa') { $tmp = ''; }
                       $teks .= " sepuluh $tmp";
                       $angka = (int) floor($nombor / pow(10, $ganda));
                   } else {                         /* Untuk 11 -19 */
                       $ganda = &$tmpganda;
                       $angka = (int) floor($nombor / pow(10, $ganda));
                       $tmp = gandaan((int) $ganda);
                       if ($tmp === 'sa') { $tmp = ''; }
                       if ($angka === 1) {
                           $teks .= " sebelas $tmp";
                       } else {
                           $teks .= " {$nom[$angka]} belas $tmp";
                       }
                   }
                   // $teks = trim($teks);
                   $tmp = nomborKeTeks($nombor - ($angka * pow(10, $ganda)));
                   if ($tmp) {
                       if ($tmp === 'sa') { $tmp = ''; }
                       $teks .= " $tmp";
                       // $teks = trim($teks);
                   }
               } else {
               /* Nombor lain boleh diproses secara biasa */
                   $teks .= ($angka === 1) ? " se$tmp" : " {$nom[$angka]} $tmp";
                   // $teks = trim($teks);
                   $tmp = nomborKeTeks($nombor - ($angka * pow(10, $ganda)));
                   if ($tmp) {
                       $teks .= " $tmp";
                       // $teks = trim($teks);
                   }
               }
           }
       }

       /* Buang space dan " dan" di hujung ayat */
       $pattern = array("/\ {2,}/", "/\ dan$/");
       $replace = array(" ", "");
       $teks = preg_replace($pattern, $replace, $teks);
       return $teks;
   } else {
       return false;
   }
}


/**
* Test
*/

/* Mari kita cuba fungsi diatas dengan pelbagai nombor */
$noyangdicuba = array('salah', '10000.00', '11909.23', '10456.23', '12345.67',
                     '12112312', '10003240', '34259.05', '83930', '51.3',
                     '843023');

foreach ($noyangdicuba as $key => $val) {
   if ($jawapan = nomborKeTeks($val)) {
       echo "$val => $jawapan\n";
   } else {
       echo "Nombor \"$val\" bukan nombor yang sah.\n";
   }
}

?>


Output test:
CODE
Nombor "salah" bukan nombor yang sah.
10000.00 =>  sepuluh ribu
11909.23 =>  sebelas ribu sembilan ratus sembilan dan dua puluh tiga
10456.23 =>  sepuluh ribu empat ratus lima puluh enam dan dua puluh tiga
12345.67 =>  dua belas ribu tiga ratus empat puluh lima dan enam puluh tujuh
12112312 =>  dua belas juta seratus dua belas ribu tiga ratus dua belas
10003240 =>  sepuluh juta tiga ribu dua ratus empat puluh
34259.05 =>  tiga puluh empat ribu dua ratus lima puluh sembilan dan lima
83930 =>  lapan puluh tiga ribu sembilan ratus tiga puluh
Nombor "51.3" bukan nombor yang sah.
843023 =>  lapan ratus empat puluh tiga ribu dua puluh tiga






1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users