PreviousNext
Help > 表單 > 表單擴展 > 自定義計算函數
自定義計算函數

運算式內置了豐富的計算函數,使用者也可以用js增加自己的計算函數,並在運算式中調用。

定義計算函數

定義普通js函數,執行計算返回結果即可。

<script type="text/javascript">

    function myAdd(a, b) {

        return a + b;

    }

</script>

使用自定義計算函數

在運算式中使用javascript函式呼叫自定義計算函數,語法為:

javascript('js函數名',參數1,參數2,...)

參數可以是欄位或運算式,參數數量不定,系統執行時,先計算參數,再將計算結果傳遞給自定義函數。

javascript並不是特殊函數,其性質和sin,cos是同等的計算函數,自定義函數的調用可以是運算式的一部分,其計算結果可以再參與運算。

示範:

javascript('myFunc',Purchase.Price,Purchase.Qty)

javascript('myFunc', Purchase.PricePurchase.Qty, Purchase.Date)

sum(javascript('myFunc', Purchase. Price) Purchase.Qty)


 

大寫金額函數

// 數位轉換成大寫金額函數

function atoc(numberValue) {

    var numberValue = new String(Math.round(numberValue  100)); // 數字金額

    var chineseValue = ""; // 轉換後的漢字金額

    var String1 = "零壹貳參肆伍陸柒捌玖"; // 漢字數位

    var String2 = "萬仟佰拾億仟佰拾萬仟佰拾元角分"; // 對應單位

    var len = numberValue.length; // numberValue 的字串長度

    var Ch1; // 數字的漢語讀法

    var Ch2; // 數位位元的漢字讀法

    var nZero = 0; // 用來計算連續的零值的個數

    var String3; // 指定位置的數值

    if (len > 15) {

        alert("超出計算範圍");

        return "";

    }

    if (numberValue == 0) {

        chineseValue = "零元整";

        return chineseValue;

    }

 

    String2 = String2.substr(String2.length - len, len); // 取出對應位數的STRING2的值

    for (var i = 0; i < len; i++) {

        String3 = parseInt(numberValue.substr(i, 1), 10); // 取出需轉換的某一位的值

        if (i != (len - 3) && i != (len - 7) && i != (len - 11) && i != (len - 15)) {

            if (String3 == 0) {

                Ch1 = "";

                Ch2 = "";

                nZero = nZero + 1;

            }

            else if (String3 != 0 && nZero != 0) {

                Ch1 = "" + String1.substr(String3, 1);

                Ch2 = String2.substr(i, 1);

                nZero = 0;

            }

            else {

                Ch1 = String1.substr(String3, 1);

                Ch2 = String2.substr(i, 1);

                nZero = 0;

            }

        }

        else { // 該位是萬億,億,萬,元位等關鍵位

            if (String3 != 0 && nZero != 0) {

                Ch1 = "" + String1.substr(String3, 1);

                Ch2 = String2.substr(i, 1);

                nZero = 0;

            }

            else if (String3 != 0 && nZero == 0) {

                Ch1 = String1.substr(String3, 1);

                Ch2 = String2.substr(i, 1);

                nZero = 0;

            }

            else if (String3 == 0 && nZero >= 3) {

                Ch1 = "";

                Ch2 = "";

                nZero = nZero + 1;

            }

            else {

                Ch1 = "";

                Ch2 = String2.substr(i, 1);

                nZero = nZero + 1;

            }

            if (i == (len - 11) || i == (len - 3)) { // 如果該位是億位或元位,則必須寫上

                Ch2 = String2.substr(i, 1);

            }

        }

        chineseValue = chineseValue + Ch1 + Ch2;

    }

 

    if (String3 == 0) { // 最後一位(分)為0時,加上

        chineseValue = chineseValue + "";

    }

 

    return chineseValue;

}