首页 > 编程语言 >c# 计算器2.0源码

c# 计算器2.0源码

时间:2023-04-14 15:02:07浏览次数:40  
标签:sender c# Text void object rtbResult 源码 EventArgs 2.0

 

 

主要时间浪费在

 

//执行计算
object result = new DataTable().Compute(s, "");

这条语句上。如果不加处理,特别大的整数相乘,会提示值 太大。只好将整数加个0变为小数;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace JcCalc
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void btn0_Click(object sender, EventArgs e)
        {
            rtbResult.Text += "0";
        }

        private void btn1_Click(object sender, EventArgs e)
        {
            rtbResult.Text += "1";
        }

        private void btn2_Click(object sender, EventArgs e)
        {
            rtbResult.Text += "2";
        }

        private void btn3_Click(object sender, EventArgs e)
        {
            rtbResult.Text += "3";
        }

        private void btn4_Click(object sender, EventArgs e)
        {
            rtbResult.Text += "4";
        }

        private void btn5_Click(object sender, EventArgs e)
        {
            rtbResult.Text += "5";
        }

        private void btn6_Click(object sender, EventArgs e)
        {
            rtbResult.Text += "6";
        }

        private void btn7_Click(object sender, EventArgs e)
        {
            rtbResult.Text += "7";
        }

        private void btn8_Click(object sender, EventArgs e)
        {
            rtbResult.Text += "8";
        }

        private void btn9_Click(object sender, EventArgs e)
        {
            rtbResult.Text += "9";
        }
        //加法
        private void btnAdd_Click(object sender, EventArgs e)
        {
            lbResult.Text = "";
            string s = rtbResult.Text;
            //判断输入框是否为空
            if (s.Length > 0)
            {
                s = s.Substring(s.Length - 1);
                //如果最后一个是运算符,则返回不执行操作;
                if ("+-*/.".Contains(s)) return;
                rtbResult.Text += "+";
            }

        }
        //减法
        private void btnSub_Click(object sender, EventArgs e)
        {
            lbResult.Text = "";
            string s = rtbResult.Text;
            //判断输入框是否为空
            if (s.Length > 0)
            {
                s = s.Substring(s.Length - 1);
                //如果最后一个是运算符,则返回不执行操作;
                if ("+-*/.".Contains(s)) return;
                rtbResult.Text += "-";
            }
        }
        //乘法
        private void btnMul_Click(object sender, EventArgs e)
        {
            lbResult.Text = "";
            string s = rtbResult.Text;
            //判断输入框是否为空
            if (s.Length > 0)
            {
                s = s.Substring(s.Length - 1);
                //如果最后一个是运算符,则返回不执行操作;
                if ("+-*/.".Contains(s)) return;
                rtbResult.Text += "*";
            }
        }
        //除法
        private void btnDiv_Click(object sender, EventArgs e)
        {
            lbResult.Text = "";
            string s = rtbResult.Text;
            //判断输入框是否为空
            if (s.Length > 0)
            {
                s = s.Substring(s.Length - 1);
                //如果最后一个是运算符,则返回不执行操作;
                if ("+-*/.".Contains(s)) return;
                rtbResult.Text += "/";
            }
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            rtbResult.Text = "";
            lbResult.Text = "";
        }

        private void btnDel_Click(object sender, EventArgs e)
        {
            string s = rtbResult.Text;
            //如果S长度大于0,则删除最后一位;
            if (s.Length > 0) s = s.Substring(0, s.Length - 1);
            rtbResult.Text = s;
        }

        private void btnPoint_Click(object sender, EventArgs e)
        {
            string s = rtbResult.Text;
            //判断输入框是否为空
            if (s.Length > 0)
            {
                s = s.Substring(s.Length - 1);
                //如果最后一个是运算符,则返回不执行操作;
                if ("+-*/.".Contains(s)) return;
                rtbResult.Text += ".";
            }
        }

        private void button19_Click(object sender, EventArgs e)
        {
            float dResult = 0;
            string s = rtbResult.Text;
            //判断输入框是否为空
            try
            {
                if (s.Length > 0)
                {
                    //如果没有运算符
                    if (s.IndexOf("+") < 0 && s.IndexOf("-") < 0 && s.IndexOf("*") < 0 && s.IndexOf("/") < 0)
                    {
                        return;
                    }
                    //这是执行“object result = new DataTable().Compute(s, "");”
                    //遇到的一个问题
                    //如果有特别大的整数相乘,会出现错误,需要将其转换为带小数位的数
                    if (s.IndexOf("*") > 0)
                    {
                        string tmpOperate = "";
                        string sTemp = "";
                        string sMul = s.Substring(0, s.IndexOf("*"));
                        //如果没有小数,直接处理后就结束 
                        int tt = sMul.IndexOf(".");
                        if (sMul.IndexOf(".") <= 0)
                        {
                            sTemp = s.Substring(0, s.IndexOf("*"));
                            sTemp += ".0";
                            sTemp += s.Substring(s.IndexOf("*"));
                            s = sTemp;
                        }
                        else
                        {
                            for (int i = sMul.Length; i > 0; i--)
                            {
                                tmpOperate = sMul.Substring(i-1, 1);
                                //如果已经是小数了就结束 
                                if (tmpOperate == ".") return;
                                //如果不是小数,就在整数后面加上 .0使其变为小数,防止计算整数出错;
                                if (tmpOperate == "+" || tmpOperate == "-" || tmpOperate == "*" || tmpOperate == "/")
                                {
                                    sTemp = s.Substring(0, s.IndexOf("*"));
                                    sTemp += ".0";
                                    sTemp += s.Substring(s.IndexOf("*"));
                                    s = sTemp;
                                    break;
                                }
                            }
                        }

                    }
                    //执行计算
                    object result = new DataTable().Compute(s, "");
                    string s2 = result.ToString();
                    if (s2 == "∞")
                    {
                        MessageBox.Show("除数不能为0");
                        return;
                    }
                    lbResult.Text = s2.ToString();
                }
            }
            catch (Exception E)
            {
                MessageBox.Show("我是3年级的小屁孩,数字多了我算不出来!\r\n提示:" + E.Message, "有点小尴尬");
                return;
            }


        }

        /// <summary>
        /// 最简单的方式由SQL计算
        /// </summary>
        /// <param name="expression">表达式</param>
        /// <returns></returns>

        private void btnHelp_Click(object sender, EventArgs e)
        {
            MessageBox.Show("谢谢你长得辣么美,还在点击我!", "三克油");
        }
    }
}

 

标签:sender,c#,Text,void,object,rtbResult,源码,EventArgs,2.0
From: https://www.cnblogs.com/lrzy/p/17318291.html

相关文章

  • JavaScript 之 JSON [4] parse()和stringify() -JSON字符串和JavaScript对象数据之间
    JavaScript之JSON[4]parse()和stringify()-JSON字符串和JavaScript对象数据之间的相互转换1、JSON.parse()JSON.parse()方法用于将一个JSON字符串解析为一个JavaScript对象。JSON字符串必须使用双引号包括属性名和字符串值,不能使用单引号或无引号。语法:JSON.parse(text,r......
  • ncurses 库使用介绍: 实现终端 GUI
    这次ENGG1340课程的groupproject是设计并实现一个text-basegame,作为终端上运行的text-basegame,有一个出彩的GUI肯定是一个加分项!在未老师的介绍下,我知道了有<ncurses.h>库这么一个神奇的东西;最重要的是,虽然它不属于C++标准库,但是在学校server里居然默认下载好了......
  • 使用vscode开发微信小程序
    1.安装插件  2.文件-打开文件夹-将新建的微信小程序导入,代码会有高亮的效果 3.编辑内容,查看效果,如果有就说明插件引入成功。 ......
  • vscode开发小程序2
    开发tab:1.下载阿里图标到新建文件夹icons里面2.在app.json里面的“windows”同层下设置tab: 默认样式的设置:小程序中不识别通配符*!  1. 2.查看效果,其他确实是默认的了: 定义主题颜色:1.在全局appwxss中声明:......
  • CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!)
    CodeTONRound2(Div.1+Div.2,Rated,Prizes!)A.Two0-1Sequencesvoidsolve(){intn=read(),m=read(),ans=1;strings,t;cin>>s>>t;//cout<<s<<t<<endl;for(inti=t.size()-1,j=s.size()-1;i>=1&......
  • 1-Spring Cloud Alibaba 主要特性
    SpringCloudAlibaba是阿里巴巴开源中间件跟SpringCloud体系的融合:主要特性:1、流量控制和服务降级:使用阿里巴巴Sentinel进行流量控制,断路和系统自适应保护; 2、服务注册和发现:实例可以在AlibabaNacos上注册,客户可以使用Spring管理的bean发现实例,通过SpringCloudNetfl......
  • 2-Spring Cloud alibaba版本对应
    目前最新版本:SpringCloudAlibaba2.2.1 SpringCloudAlibaba2.1.0RELEASE对应SpringCloudGreenwich版本SpringCloudAlibaba2.2.0RELEASE对应SpringCloudHoxton.RELEASE版本SpringCloudAlibaba2.2.1RELEASE对应SpringCloudHoxton.SR3版本......
  • 使用VS Code开发微信小程序
    使用VSCode开发微信小程序微信开发工具结构缺点VSCodeVSCode下载插件Chinese小程序开发助手Easylessminappvscodewxmlwechat-snippet中文乱码处理配置Easyless说明 微信开发工具说归说,但是开发微信小程序的时候,这个微信开发工具......
  • 在网页中呈现Crystal Report 2022报表
    准备好数据。创建好水晶报表报表。运行预览时,出现如下提示:但是,我已经有在aspx.cs有传入帐户与密码:密码已经确认输入为正确的。但是: 奇了,什么情况?先来看看是什么原因,导致这个问题产生:2处的服务器名称不相同。解决方案,2种可以解决。第1种,改变xxx.aspx.cs的链接字符,把12......
  • arcpy孔洞如何填补
     参考:https://blog.csdn.net/weixin_40450867/article/details/85222383带孔洞的polygon坐标是如何存的?如果没有孔洞,那么polygon的坐标最后一个点和第一个点会重合。如果带孔洞的话,就不重合?参考2:https://blog.csdn.net/u010608964/article/details/81567871......