作者 主題: 阿拉伯數字轉成國字數字  (閱讀 25066 次)

0 會員 與 1 訪客 正在閱讀本文。

sida

  • 可愛的小學生
  • *
  • 文章數: 27
    • 檢視個人資料
阿拉伯數字轉成國字數字
« 於: 2003-05-20 18:12 »
阿拉伯數字轉成國字數字

假設$num=12345;
則$cnu="一萬貳千三佰肆十五";

perl的寫法..
http://neo.style.ne.jp/perl_tech.html

有誰會PHP的嗎?

paulso

  • 俺是博士!
  • *****
  • 文章數: 1966
    • 檢視個人資料
阿拉伯數字轉成國字數字
« 回覆 #1 於: 2003-05-20 18:27 »
若要自己寫出來, 對換, 很難的哦, 不知會否有 function 能做到這個

sida

  • 可愛的小學生
  • *
  • 文章數: 27
    • 檢視個人資料
阿拉伯數字轉成國字數字
« 回覆 #2 於: 2003-05-20 18:36 »
小想法..

1.先把數字轉成中文
2.再依序插入百 千 萬
                                                                               
四千六百三十八"兆"兩千八百三十四"萬"六千七百九十二
                                                                               
百和千基本上是重複的 另外萬 兆或不重複

--
我不會拉..

reggie

  • 活潑的大學生
  • ***
  • 文章數: 386
    • 檢視個人資料
阿拉伯數字轉成國字數字
« 回覆 #3 於: 2003-05-20 18:40 »
我有一些程式的基礎,但是我不會php
我對這個程式有幾個想法,說不定能幫上忙
以陣列的方式把a[1]="一"、a[2]="二".......
b[1]="一十"'、b[2]="二十"......
c[1]="一百"、c[2]="兩百".....以此類推
這可以用迴圈的方式放入字串
再以mid()的方式取$num這個變數,以最右邊開始取
然後以比對的方式取出陣列的值,再把全部的值加起來(字串相加就是連在一起)
最後應該離答案不遠了.......thx
應該是有更好的方法,不過小弟只會這種笨方法XD

mimeory

  • 訪客
阿拉伯數字轉成國字數字
« 回覆 #4 於: 2003-05-20 22:02 »
小弟對於perl/php等並不熟悉..不過小弟知道可以以以下方法做到..
代碼: [選擇]
mimeory@magic:~$--> echo '123' > ./test.txt
mimeory@magic:~$--> sed 'y/123/一二三/' ./test.txt
一二三
mimeory@magic:~$-->


have fun ^_^

gol4302

  • 憂鬱的高中生
  • ***
  • 文章數: 100
    • 檢視個人資料
阿拉伯數字轉成國字數字
« 回覆 #5 於: 2003-05-20 22:55 »
以下程式是把萬位以下的數字轉為國字 ,若要寫一個大於萬位的程式也不難只要每次取出除以 10000 的餘數再呼叫下列 function 即可 ,有興趣的可以自己 Try Try ,真有需要我再完成其他部份



function numtochs($a) {

  $array1 = array("千","百","拾");
  $array2 = array("零","壹","貳","參","肆","伍","陸","柒","捌","玖");

  $lv=1;
  $justzero=true;
  $_ret = '';

  while ($a>0) {
    $b = intval($a / pow(10,4-$lv));

    if (($b==0) && (! $justzero))  {
       $_ret = $_ret.$array2[$b];
       $justzero=true;
    }
    if ($b!=0) {
       $_ret = $_ret.$array2[$b].$array1[$lv-1];
       $justzero=false;
    }

    $a = $a % pow(10,4-$lv);
    $lv = $lv + 1;
  }
  return _ret;
}

sida

  • 可愛的小學生
  • *
  • 文章數: 27
    • 檢視個人資料

sida

  • 可愛的小學生
  • *
  • 文章數: 27
    • 檢視個人資料
阿拉伯數字轉成國字數字
« 回覆 #7 於: 2003-05-20 23:49 »
引述: "sida"
demo
http://www.ms.nctu.edu.tw/~yeekang/tmp/counter.php
source
http://www.ms.nctu.edu.tw/~yeekang/tmp/counter.phps


寫法跟gol4302所說的不太依樣吧..
如果可以的話
請gol4302寫寫看您的想法

gol4302

  • 憂鬱的高中生
  • ***
  • 文章數: 100
    • 檢視個人資料
阿拉伯數字轉成國字數字
« 回覆 #8 於: 2003-05-21 10:26 »
再加上下面這一段 ,使用時直接呼叫 num2chs 即可

http://www.ms.nctu.edu.tw/~yeekang/tmp/counter.phps 它的作法是用字串觀念來處理 ,而我的方式是用數字的方式處理,基於 php 整數或符點的有效位數目前程式僅能處理 20 億左右的資訊


function num2chs($a) {
   $array1 = array("","萬","億");
   
   $lv = 0;
   $_ret = '';
   $sign = '';
   if ($a<0) {
      $a = abs($a);
      $sign = '負';
   }
   while ($a>0) {
      $_ret = numtochs($a % 10000).$array1[$lv].$_ret;
      $a = intval($a / 10000);
      $lv = $lv+1;
   }
   if ($_ret=='') {
      $_ret = '零';
   }
   return $sign.$_ret;
}

sida

  • 可愛的小學生
  • *
  • 文章數: 27
    • 檢視個人資料
阿拉伯數字轉成國字數字
« 回覆 #9 於: 2003-05-23 20:23 »
引述: "sida"
小想法..

1.先把數字轉成中文
2.再依序插入百 千 萬
                                                                               
四千六百三十八"兆"兩千八百三十四"萬"六千七百九十二
                                                                               
百和千基本上是重複的 另外萬 兆或不重複


請問我這個方法行的通嗎?
有人會用這種方法寫嗎?

螢火飛

  • 酷!學園 學長們
  • 活潑的大學生
  • ***
  • 文章數: 400
    • 檢視個人資料
    • http://firefly.idv.tw
阿拉伯數字轉成國字數字
« 回覆 #10 於: 2003-05-23 21:50 »
以下是我以前幫別人寫的作業,用的是 VB,有註解,請參考:
代碼: [選擇]

Dim cName
Dim ar
Dim cNum As Integer
Dim cunit As String
Dim i As Integer
Dim cZero As Integer
Dim conver As String
Dim cLast As String

Private Sub Command1_Click()

ar = Array("零", "壹", "貳", "參", "肆", "伍", "陸", "柒", "捌", "玖")
cName = Array("", "", "拾", "佰", "仟", "萬", "拾", "佰", "仟", "億", "拾", "佰", "仟")
conver = ""
cLast = ""
cZero = 0
i = 1
For j = Len(Text1.Text) To 1 Step -1
    cNum = Val(Mid(Text1.Text, i, 1))
    cunit = cName(j) '取出位數
    If cNum = 0 Then '判斷取出的數字是否為0,如果是0,則記錄共有幾0
       cZero = cZero + 1
       If (InStr("萬億", cunit) > 0 And (cLast = "")) Then '如果取出的是萬,億,則位數以萬億來補
          cLast = cunit
       End If
    Else
       If cZero > 0 Then '如果取出的數字0有n個,則以零代替所有的0
        If InStr("萬億", Right(conver, 1)) = 0 Then
           conver = conver + cLast '如果最後一位不是億,萬,則最後一位補上"億萬"
        End If
          conver = conver + "零"
          cZero = 0
          cLast = ""
       End If
     conver = conver + ar(cNum) + cunit '如果取出的數字沒有0,則是中文數字+單位
    End If
    i = i + 1
Next
'判斷數字的最後一位是否為0,如果最後一位為0,則把萬億補上
    If InStr("萬億", Right(conver, 1)) = 0 Then
       conver = conver + cLast '如果最後一位不是億,萬,則最後一位補上"億萬"
    End If

Text2.Text = "新台幣" & conver & "元整"
End Sub

sida

  • 可愛的小學生
  • *
  • 文章數: 27
    • 檢視個人資料
阿拉伯數字轉成國字數字
« 回覆 #11 於: 2003-05-24 00:27 »
引述: "螢火飛"
以下是我以前幫別人寫的作業,用的是 VB,有註解,請參考:


VB不太會看...
請問位數的限制到第幾位?

sida

  • 可愛的小學生
  • *
  • 文章數: 27
    • 檢視個人資料
阿拉伯數字轉成國字數字
« 回覆 #12 於: 2003-05-24 00:28 »
引述: "sida"
引述: "sida"
小想法..

1.先把數字轉成中文
2.再依序插入百 千 萬
                                                                               
四千六百三十八"兆"兩千八百三十四"萬"六千七百九十二
                                                                               
百和千基本上是重複的 另外萬 兆或不重複


請問我這個方法行的通嗎?
有人會用這種方法寫嗎?


如果可以用這個方法的話..
位數就沒有限制了吧

螢火飛

  • 酷!學園 學長們
  • 活潑的大學生
  • ***
  • 文章數: 400
    • 檢視個人資料
    • http://firefly.idv.tw
阿拉伯數字轉成國字數字
« 回覆 #13 於: 2003-05-24 17:14 »
引述: "sida"
引述: "螢火飛"
以下是我以前幫別人寫的作業,用的是 VB,有註解,請參考:


VB不太會看...
請問位數的限制到第幾位?

雖然是 VB 但其中沒有什麼高深的指令,應該很容易轉換到 php,用心點看吧,就算不懂,註解總看得懂吧 ^^

位數基本上是到999999999999,但那只是範例,如果高興,100位數也行,只要在 cName array 中加進去,視系統能夠容許的最大位數而定,與程式無關。

這個題目,沒有什麼了不起的,重點在於--------> 連續零的處理<------這才是真正的重點所在。

gol4302

  • 憂鬱的高中生
  • ***
  • 文章數: 100
    • 檢視個人資料
阿拉伯數字轉成國字數字
« 回覆 #14 於: 2003-05-24 17:20 »
引述: "sida"
引述: "sida"
引述: "sida"
小想法..

1.先把數字轉成中文
2.再依序插入百 千 萬
                                                                               
四千六百三十八"兆"兩千八百三十四"萬"六千七百九十二
                                                                               
百和千基本上是重複的 另外萬 兆或不重複


請問我這個方法行的通嗎?
有人會用這種方法寫嗎?


如果可以用這個方法的話..
位數就沒有限制了吧


若用字串方式處理原則上是沒什麼位數限制的 ,您提的方式當然可以只是要注意中間 0 的處理 ,何不實作看看呢 ?