2012年2月8日 星期三

數字轉國字


說明:
輸入數字轉成支票格式國字。

原始碼:
<input id="input_num" type="text" size="30" value="" />
<button id="convert_num">Convert</button>
<input id="output_num" type="text" size="30" value="" />
<script type="text/javascript">
function $(id) {return document.getElementById(id.substr(1));}
$('#output_num').onmouseover = function() {
    $('#output_num').select();
};
$('#convert_num').onclick = function() {
    var chnum = "零壹貳參肆伍陸柒捌玖";
    var chunit = "拾佰仟";
    var chunits = "\r萬億兆京垓秭穰溝澗正載極";
    var num = $('#input_num').value?$('#input_num').value:"";
    var output = "";
    var is_zero = true;
    for(var i=0;i<num.length;i++) {
        var n = parseInt(num.charAt(i));
        if(isNaN(n)) {
            $('#output_num').value = "Error";
            return;
        }
        if((num.length-i-1)%4 == 0) {
            if(n == 0) {
                if(!is_zero)
                    output += chunits.charAt((num.length-i-1)/4);
                is_zero = true;
            } else {
                output += chnum.charAt(n) + chunits.charAt((num.length-i-1)/4);
                is_zero = false;
            }
        } else if(n != 0) {
            output += chnum.charAt(n) + chunit.charAt((num.length-i-1)%4-1);
            is_zero = false;
        }
    }
    $('#output_num').size = output.length*2;
    $('#output_num').value = (output?output:"零") + "元整";
}
</script>

6 則留言:

Unknown 提到...

謝謝QQBoxy大大地程式,真是太棒了!

不過美中不足的是:有些應該要有「零」字的地方沒有顯示。
例如:4010401
應顯示為:肆佰零壹萬肆佰零壹元整

不過還是謝謝大大的程式,給了我很大的幫忙。

QQBoxy 提到...

呵呵,我知道這個問題,
不過我查過兩種寫法銀行都能接受:)

Unknown 提到...

您好,我想將您的javascript套用在acrobat form使用,將其中一個欄位的阿拉伯數字金額轉換為中文大寫金額後,寫入另一個欄位,我試了好幾天都不成功,能否指導一下?

QQBoxy 提到...

知道失敗的原因嗎? 貼個目前的程式碼吧

Unknown 提到...

您好,小弟目前在銀行服務,需要設計一套契約範本提供分行使用,其中涉及將阿拉伯數字轉換為中文大寫數字,您所完成轉換中文大寫數字的javascript,應該是截至目前為止,小弟發現唯一能夠轉換完全符合銀行使用慣例中文大寫數字的轉換程式,因此,希望您能協助將此javascript應用於小弟所設計之契約範本.小弟以acrobat form設計一套計算金額的表單,欄位amt_sum係amt_1,amt_2,amt_3及amt_4之總和,我的需求是要將amt_sum轉換為中文大寫數字並寫入amt_sum_cht欄位內.目前自行修改您所完成轉換中文大寫數字的javascript如下:
var chnum = "零壹貳參肆伍陸柒捌玖";
var chunit = "拾佰仟";
var chunits = "\r萬億兆京垓秭穰溝澗正載極";
var num = +getField("amt_sum").value;
var output = "";
var is_zero = true;
for(var i=0;i<num.length;i++) {
var n = parseInt(num.charAt(i));
if((num.length-i-1)%4 == 0) {
if(n == 0) {
if(!is_zero)
output = chunits.charAt((num.length-i-1)/4);
is_zero = true;
} else {
output = chnum.charAt(n) + chunits.charAt((num.length-i-1)/4);
is_zero = false;
}
} else if(n != 0) {
output = chnum.charAt(n) + chunit.charAt((num.length-i-1)%4-1);
is_zero = false;
}
}
event.value = (output) + "元整";
另外提供acrobat form檔案https://drive.google.com/file/d/1M7N5BSHoVxgEkNvQmqWkBqvXWXxMgTPR/view?usp=sharing

QQBoxy 提到...

看起來僅是搬移程式碼,
我覺得也許是acrobat form的語法有誤,
不過這方面的語法撰寫我並不熟悉,
妳可以先從簡單的語法開始測試,
不要一次將所有程式都放上去。