龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

用js编写计算器程序

时间:2012-12-29 08:41来源:未知 作者:admin 点击:
分享到:
一个与众不同的javascript写的计算器代码,有需要的朋友下载后保存成html就可以实例了。 代码如下 script type=text/javascript// ![CDATA[ String.prototype.trim = function () { return this.replace(/^s+/, '').rep
一个与众不同的javascript写的计算器代码,有需要的朋友下载后保存成html就可以实例了。
 代码如下

<script type="text/javascript">// <![CDATA[
        String.prototype.trim = function () {
            return this.replace(/^s+/, '').replace(/s+$/, '');
        };
        function calc() {
            var expression = document.getElementById("txtExpression").value;
            try {
                document.getElementById("txtResult").innerText ='计算结果为:'+ calcBasic(calcComplex(expression));
            } catch(e) {
                document.getElementById("txtResult").innerText = e.message;
            }
           
        }
        function calcComplex(complexExpression) {
            var arr = new Array();
            var left = 0;
            var right = 0;
            for (var i = 0; i < complexExpression.length; i++) {
                if (complexExpression.charAt(i) == '(') {
                    arr.push(i);
                    left++;
                }
                if (complexExpression.charAt(i) == ')') {
                    arr.push(i);
                    right++;
                }
            }
            if (left != right) {
                throw new Error('括号不匹配!','2');
            }
            var brackets = complexExpression.replace(/[^(|^)]/g, '');

                for (i = 0; i < brackets.length; i++) {
                    if (brackets.charAt(i) == "(" && brackets.charAt(i + 1) == ")") {
                        var simpleExpression = complexExpression.substr(arr[i] + 1, arr[i + 1] - arr[i] - 1);
                        if (calcBasic(simpleExpression)<0) {
                            complexExpression = complexExpression.substr(0, arr[i]) + '[' + Math.abs(calcBasic(simpleExpression)) + '' + complexExpression.substr(arr[i + 1] + 1);
                        }
                        else {
                            complexExpression = complexExpression.substr(0, arr[i]) + '' + calcBasic(simpleExpression) + '' + complexExpression.substr(arr[i + 1] + 1);
                        }                       
                        complexExpression=calcComplex(complexExpression);
                       break;
                    }
                }
            return complexExpression;
        }
        function calcBasic(baseExpression) {
            if (baseExpression.charAt(0)=='-') {
                baseExpression = '[' + baseExpression.substr(1);
            }
            var constants = baseExpression.trim().replace(/[*|/|+|-]/g, ' ').split(/s+/g);
            for (var index in constants) {
                //只留下符号
                baseExpression = baseExpression.replace(/s+/g, '').replace(constants[index], '');

                //将提取的常量字符串转化为数字
                var item;
                if (constants[index].trim().charAt(0)=='[') {
                    item = parseFloat(constants[index].trim().replace('[','-'));
                }
                else {
                    item = parseFloat(constants[index].trim());
                }
               
                if (isNaN(item)) {
                    throw new Error('存在非法符号!','0');
                }
                else {
                    constants[index] = item;
                }
            }
            if (constants.length != baseExpression.length + 1) {
                throw new Error('表达式有误!','1');
            }
           
            for (var i = 0; i < baseExpression.length; i++) {
                switch (baseExpression.charAt(i)) {
                    case '*':
                        constants.splice(i, 2, constants[i] * constants[i + 1]);
                        baseExpression = baseExpression.replace('*', '');
                        i -= 1;
                        break;
                    case '/':
                        if (constants[i + 1] == 0) {
                            throw new Error('除数不能为0!');
                        }
                        constants.splice(i, 2, constants[i] / constants[i + 1]);
                        baseExpression = baseExpression.replace('/', '');
                        i -= 1;
                        break;
                    default: break;
                }
            }
            for (var j = 0; j < baseExpression.length; j++) {
                switch (baseExpression.charAt(j)) {
                    case '+':
                        constants.splice(j, 2, constants[j] + constants[j + 1]);
                        baseExpression = baseExpression.replace('+', '');
                        j -= 1;
                        break;
                    case '-':
                        constants.splice(j, 2, constants[j] - constants[j + 1]);
                        baseExpression = baseExpression.replace('-', '');
                        j -= 1;
                        break;
                    default: break;
                }
            }

            return constants[0];
        }
// ]]></script>
</p>
<div style="text-align: center;"><textarea id="txtExpression" style="width: 90%; height: 200px; overflow-y: visible;"></textarea><br />
<div style="width: 90%; margin: 4px auto; text-align: left;"><input id="btnSubit" type="button" onclick="calc()" value="计算" />&nbsp;<span id="txtResult"></span></div>
</div>


精彩图集

赞助商链接