精华内容
下载资源
问答
  • 一款非常实用的JAVA计算器, 支持触摸屏手机 ,支持常用函数 ,支持度分秒输入与转换!
  • 您还在为手机装着很多杂七杂八的计算器而烦恼吗?那么试试灵思迈软件开发的生活计算助理,它集成了数学计算器,标准体重计算器,个人所得税计算器,住房贷款计算器,银行存款利息计算器,安 全期计算,购房税费...
  • 安卓简易计算器

    2018-04-19 10:29:08
    安卓简易计算器安卓 Android是由Andy Rubin创立的一个手机操作系统,后来被Google收购。Gooole希望与各方面共同建立一个标准化的、开放式的移动电话软件平台,从而在移动产业形成一个开放式的操作平台。界面编程 ...

    安卓简易计算器


    安卓

    Android是由Andy Rubin创立的一个手机操作系统,后来被Google收购。Gooole希望与各方面共同建立一个标准化的、开放式的移动电话软件平台,从而在移动产业形成一个开放式的操作平台。

    界面编程

    安卓常用的几种布局:线性布局(LineraLayout)、表格布局(Tablelayout)、帧布局(FrameLayout)、相对布局(RelativeLayout)等等。我这里用的是比较简单的“线性布局”。

    布局文件(activity_main.xml):

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.example.zhaoxudong.calculatorapp.MainActivity">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            tools:layout_editor_absoluteY="0dp"
            tools:layout_editor_absoluteX="0dp">
    
            <EditText
                android:layout_width="403dp"
                android:layout_height="155dp"
                android:id="@+id/result_Text"/>
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="CE"
                    android:id="@+id/CE"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="DEL"
                    android:id="@+id/DEL"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="SIN"
                    android:id="@+id/SIN"/>
                <Button
                    android:layout_width="113dp"
                    android:layout_height="wrap_content"
                    android:text="COS"
                    android:id="@+id/COS"/>
    
    
    
            </LinearLayout>
    
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="7"
                    android:id="@+id/number7"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="8"
                    android:id="@+id/number8"/>/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="9"
                    android:id="@+id/number9"/>/>
                <Button
                    android:layout_width="117dp"
                    android:layout_height="wrap_content"
                    android:text="+"
                    android:id="@+id/add_but"/>
            </LinearLayout>
    
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="4"
                    android:id="@+id/number4"/>/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="5"
                    android:id="@+id/number5"/>/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="6"
                    android:id="@+id/number6"/>/>
                <Button
                    android:layout_width="117dp"
                    android:layout_height="wrap_content"
                    android:text="-"
                    android:id="@+id/sub_but"/>
            </LinearLayout>
    
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="1"
                    android:id="@+id/number1"/>/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="2"
                    android:id="@+id/number2"/>/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="3"
                    android:id="@+id/number3"/>/>
                <Button
                    android:layout_width="116dp"
                    android:layout_height="wrap_content"
                    android:text="*"
                    android:id="@+id/mult_but"/>
            </LinearLayout>
    
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="="
                    android:id="@+id/sign_but"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="0"
                    android:id="@+id/number0"/>/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="."
                    android:id="@+id/spot_but"/>
                <Button
                    android:layout_width="114dp"
                    android:layout_height="wrap_content"
                    android:text="/"
                    android:id="@+id/div_but"/>
            </LinearLayout>
    
        </LinearLayout>
    
    
    </android.support.constraint.ConstraintLayout>
    

    界面效果:

    逻辑部分

    逻辑部分是由java代码实现,实践证明代码多练还是有好处的。

    为了实现按钮的点击事件:

    public class MainActivity extends Activity implements OnClikListener{}

    对layout中的按钮进行定义:

        private Button number0;
        private Button number1;
        private Button number2;
        private Button number3;
        private Button number4;
        private Button number5;
        private Button number6;
        private Button number7;
        private Button number8;
        private Button number9;
    
        /*
        运算符
         */
        private Button add_but;//加法
        private Button sub_but;//减法
        private Button mult_but;//乘法
        private Button div_but;//除法
    
        /*
        等号
        小数点
        归零
         */
        private Button sign_but;//等号
        private Button spot_but;//小数点
        private Button CE_but;//归零键
        private Button DEL;
        private Button SIN;
        private Button COS;
        /*
        结果
         */
        private EditText result;
        private boolean clear_flag;//清空标识
    

    对每个按钮进行实例化并且设置点击事件

     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            /*
            数字
             */
            number0 = (Button) findViewById(R.id.number0);
            number1 = (Button) findViewById(R.id.number1);
            number2 = (Button) findViewById(R.id.number2);
            number3 = (Button) findViewById(R.id.number3);
            number4 = (Button) findViewById(R.id.number4);
            number5 = (Button) findViewById(R.id.number5);
            number6 = (Button) findViewById(R.id.number6);
            number7 = (Button) findViewById(R.id.number7);
            number8 = (Button) findViewById(R.id.number8);
            number9 = (Button) findViewById(R.id.number9);
            /*
            运算符
             */
            add_but = (Button) findViewById(R.id.add_but);
            sub_but = (Button) findViewById(R.id.sub_but);
            mult_but = (Button) findViewById(R.id.mult_but);
            div_but = (Button) findViewById(R.id.div_but);
            /*
            等号
            小数点
            归零
             */
            sign_but = (Button) findViewById(R.id.sign_but);//等号
            spot_but = (Button) findViewById(R.id.spot_but);//小数点
            CE_but = (Button) findViewById(R.id.CE);//归零
            DEL = (Button) findViewById(R.id.DEL);
            SIN=(Button) findViewById(R.id.SIN);
            COS=(Button) findViewById(R.id.COS);
            /*
            结果
             */
            result = (EditText) findViewById(R.id.result_Text);
    
    
        /*
        初始化事件
         */
    
            number0.setOnClickListener(this);
            number1.setOnClickListener(this);
            number2.setOnClickListener(this);
            number3.setOnClickListener(this);
            number4.setOnClickListener(this);
            number5.setOnClickListener(this);
            number6.setOnClickListener(this);
            number7.setOnClickListener(this);
            number8.setOnClickListener(this);
            number9.setOnClickListener(this);
    
            add_but.setOnClickListener(this);
            sub_but.setOnClickListener(this);
            mult_but.setOnClickListener(this);
            div_but.setOnClickListener(this);
    
            sign_but.setOnClickListener(this);
            spot_but.setOnClickListener(this);
            CE_but.setOnClickListener(this);
            DEL.setOnClickListener(this);
            SIN.setOnClickListener(this);
            COS.setOnClickListener(this);
        }

    下面是在onClick方法中实现逻辑运算:

    这里使用的方法是使用以下代码获取EditText中的字符串

     String str = result.getText().toString();

    为了区分开数字和运算符,分别用s1、s2和op来表示数字和运算符

    String s1 = exp.substring(0, exp.indexOf(" "));//运算符前面的字符串
    String op = exp.substring(exp.indexOf(" ") + 1, exp.indexOf(" ") + 2);//截取到的运算符
    String s2 = exp.substring(exp.indexOf(" ") + 3);//运算符后面的字符串

    为了能够实现点击任意按钮可以出现对应的字符,使用以下代码可以获取Button中的内容

    result.setText(str + " " + ((Button) v).getText() + " ");

    通过判断出数字和运算符来进行运算,下面是逻辑运算全部的代码:

    private void getResult() {
            clear_flag = true;
            String exp = result.getText().toString();
            double result_1 = 0;
            if(exp==null||exp.equals("")){
                return;
            }
            if(!exp.contains(" ")){
                return;
            }
            if (clear_flag){
                clear_flag=false;
            }
            clear_flag=true;
            String s1 = exp.substring(0, exp.indexOf(" "));//运算符前面的字符串
            String op = exp.substring(exp.indexOf(" ") + 1, exp.indexOf(" ") + 2);//截取到的运算符
            String s2 = exp.substring(exp.indexOf(" ") + 3);//运算符后面的字符串
            if (!s1.equals("") && !s2.equals("")) {
                double d1 = Double.parseDouble(s1);
                double d2 = Double.parseDouble(s2);
                if (op.equals("+")) {
                    result_1 = d1 + d2;
                } else if (op.equals("-")) {
                    result_1 = d1 - d2;
    
                } else if (op.equals("*")) {
                    result_1 = d1 * d2;
    
                } else if (op.equals("/")) {
                    if (d2 == 0)
                        result_1 = 0;
                    result_1 = d1 / d2;
    
                }
                if (!s1.contains(".") && !s2.contains(".")&&!op.equals("/")) {
                    int r = (int) result_1;
                    result.setText(r + "");
    
                } else {
                    result.setText(result_1 + "");
                }
    
            } else if (!s1.equals("") && s2.equals("")) {
                result.setText(exp);
            } else if (s1.equals("") && !s2.equals("")) {
                double d2 = Double.parseDouble(s2);
                if (op.equals("+")) {
                    result_1 = 0 + d2;
                } else if (op.equals("-")) {
                    result_1 = 0 - d2;
    
                } else if (op.equals("*")) {
                    result_1 = 0;
    
                } else if (op.equals("/")) {
                    result_1 = 0;
    
                }
            } else {
                result.setText("");
            }
        }

    以上便是简单计算器的所有重要代码。

    实现功能

    • 支持加减乘除的基本运算

    • 支持加减乘除后的再运算

    • 支持浮点数运算

    • 支持三角函数sin cos运算

    • 支持数字删除

    • 支持置零

    展开全文
  • 建工计算器v2.13.7.apk

    2020-07-13 10:21:39
    功能丰富、用途广泛的全能型实用计算器,可以记录计算历史,内置常用计算公式、自定义公式、查询五金等。 工程人员、科研人员、学生必备的手机计算器,大幅提高工作效率,日常计算极为方便。
  • 自从2014年本工具第一版上传以来,计算器越来越多往表达式驱动发展,现在连手机上都很多是表达式计算器了,这是一个可喜的进步。 如果结合屏幕取词功能,甚至可以像金山词霸一样即指即算,带来无限可能。 工具简介...
  • Android--计算器小程序

    千次阅读 2016-03-18 22:36:04
    今天是学android的第3天,感觉自己速度有点慢了,前几天学了一些常用的控件,监听器,五种布局方式,页面跳转,Activity相关知识等内容。 今天做了一个计算器,首先分解一下步骤: 1. 编写基本的布局文件: 下面是...

    今天是学android的第3天,感觉自己速度有点慢了,前几天学了一些常用的控件,监听器,五种布局方式,页面跳转,Activity相关知识等内容。

    今天做了一个计算器,首先分解一下步骤:

    1. 编写基本的布局文件:

    下面是整个程序安装到手机之后的程序:


    现在感觉这个布局没有布好,控件在空间上,距离上不均匀,往后的学习中我会加强练习。

    这个布局采用的是LinearLayout线性布局的方式,上面的内容比较好理解,主要是下面大黄框框中的布局方式比较不好理解,它的结构是:黄框框是一个大的LinearLayout,里面有两个小的垂直布局的LinearLayout,在左边的LinearLayout中有两个水平排列的LinearLayout。

    布局文件解析:http://blog.csdn.net/wangfayinn/article/details/8005358

    2.优化按钮布局:

    这个优化的过程是通过在res/drawable文件夹中创建几个样式文件如(shape),以构造出不同类型的图案,例如:

        

     <corners android:radius="5dp"/><!--这个表示的是圆角-->
    <solid android:color="#556B2F"></solid><!--这个表示的是填充色-->
    <gradient 
            android:startColor="#000000"
            android:endColor="#ffffff"
            /><!--这个表示的是过渡色-->
    <stroke 
    	    android:width="1dp"
    	    android:color="#0f0f0f"/>
    <!--这个表示的是边缘线的粗细以及颜色-->
    接下来,如果要设置按钮不同效果切换的话,则可以使用(selector),如:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:drawable="@drawable/ashen_bg" android:state_pressed="true"/><!--表示按钮点击下去时的颜色-->
        <item android:drawable="@drawable/orange_bg"/>
    </selector>
    
    最后通过android:background="@drawable/white_selector"属性设置好样式即可。

    3.编写业务逻辑:

    业务逻辑层,要完成的内容是:两个数之间的计算,基本的排除能力(比如:遇到除数为0时,程序不会奔溃)。我是通过实现OnClickListener接口来监听事件的,下面介绍一下三种监听事件的写法:

    a) 匿名内部类的实现,形式如下:

    		button1.setOnClickListener(new OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				// TODO 自动生成的方法存根
    				//在当前onClick方法中监听点击Button的动作
    				System.out.println("我的Button被点击了!");
    			}
    		});

    b)独立类的写法和作用,形式如下:

    		button2 = (Button)findViewById(R.id.button2);
    		button2.setOnClickListener(new MyOnClickListener(){
    			@Override
    			public void onClick(View v) {
    				// TODO 自动生成的方法存根
    				//调用父类的OnClick方法
    				super.onClick(v);
    				Toast.makeText(MainActivity.this, "bt1要执行的逻辑", 1).show();
    			}
    		});
    		imageButton1 = (ImageButton)findViewById(R.id.imageButton1);
    		imageButton1.setOnClickListener(new MyOnClickListener(){
    
    			@Override
    			public void onClick(View v) {
    				// TODO 自动生成的方法存根
    				super.onClick(v);
    				Toast.makeText(MainActivity.this, "imagebt1要执行", 1).show();
    			}
    		});
    c)通过实现接口来实现监听器:

    		button3 = (Button)findViewById(R.id.button3);
    		button3.setOnClickListener(this);
    	}
    	@Override
    	public void onClick(View v) {
    		// TODO 自动生成的方法存根
    		Log.i("tag", "第三种方式实现");
    		Toast.makeText(this, "button3被执行", 1).show();
    	}
    }
    class MyOnClickListener implements OnClickListener{
    
    	@Override
    	public void onClick(View v) {
    		//会把按钮传给v
    		// TODO 自动生成的方法存根
    		v.setAlpha(0.5f);//让按钮变透明
    	}
    }

    计算器的具体程序我发到资源上去了:http://download.csdn.net/detail/sysstc/9465858
    展开全文
  • 整理了下电脑和手机计算器里最常用的进制 1、HEX,Hexadecimal,代逢十六进一,表十六进制。 2、DEC,Decimal,逢十进一,代表十进制。 3、OCT,Octal,逢八进一,代表八进制。 4、BIN,Binary,逢二进一,代表...

    休闲之余整理了下电脑和手机计算器里最常用的进制

    1、HEX,Hexadecimal ,代逢十六进一,表十六进制。一般用数字0到9和字母A到F表示,其中A~F表示10~15。前缀一般用数字0和字母X(不区分字母大小写)来表示十六进制数,比如:0x74H。

    2、DEC,Decimal ,逢十进一,代表十进制。一般用数字0至9表示,前缀一般用字母D来表示。

    3、OCT,Octal ,逢八进一,代表八进制。一般用字母O来表示。

    4、BIN,Binary ,逢二进一,代表二进制。一般用字母B来表示。

     

    对英语敏感的童鞋

    希望可以帮助到您们  谢谢!

    展开全文
  • 您还在为手机装着很多杂七杂八的计算器而烦恼吗?那么试试灵思迈软件开发的生活计算助理,它集成了数学计算器,标准体重计算器,个人所得税计算器,住房贷款计算器,银行存款利息计算器,安全期计算,购房税费计算器...
  • 您还在为手机装着很多杂七杂八的计算器而烦恼吗?那么试试灵思迈软件开发的生活计算助理,它集成了数学计算器,标准体重计算器,个人所得税计算器,住房贷款计算器,银行存款利息计算器,安全期计算,购房税费计算器...
  • 您还在为手机装着很多杂七杂八的计算器而烦恼吗?那么试试灵思迈软件开发的生活计算助理,它集成了数学计算器,标准体重计算器,个人所得税计算器,住房贷款计算器,银行存款利息计算器,安全期计算,购房税费计算器...
  • 您还在为手机装着很多杂七杂八的计算器而烦恼吗?那么试试灵思迈软件开发的生活计算助理,它集成了数学计算器,标准体重计算器,个人所得税计算器,住房贷款计算器,银行存款利息计算器,安全期计算,购房税费计算器...
  • 我们人类以为是 0.2,可是打开手机计算器试试呢? 解密 国外计算程序使用的单步计算法。于是,a+b%表示a*(1+b%)。所以,手机计算器实际上在计算10%*(1+10%)= 0.11。 再通俗点一句话说清运算原理。以8+10%为例,...

    1 计算器的灾难:10%+10%到底等于几?

    • 我们人类以为是 0.2,可是打开手机计算器试试呢?

    解密

    国外计算程序使用的单步计算法。于是,a+b%表示a*(1+b%)。所以,手机计算器实际上在计算10%*(1+10%)= 0.11

    再通俗点一句话说清运算原理。以8+10%为例,为什么=8.8而不是8.1?一起读:8元钱,加上10%的小费,一共是8.8元

    最早的电子计算器并没有%,是后来加的。作为后续改进,它一定解决了计算场景中的常用痛点,而绝不是脑残。我推测很可能是西方人计算折扣、小费、利息等常见场景。

    2 满目疮痍的Double

    • 浮点数四则运算

    • 结果

    由于计算机内部是以二进制存储数值的,浮点数亦是。Java采用IEEE 754标准实现浮点数的表达和运算。比如,0.1的二进制表示为0.0 0011 0011 0011… (0011 无限循环),再转换为十进制就是0.1000000000000000055511151231257827021181583404541015625。计算机无法精确表示0.1,所以浮点数计算造成精度损失。

    你可能觉得像0.1,其十进制和二进制间转换后相差很小,不会对计算产生什么严重影响。但积土成山,大量使用double作大量金钱计算,最终损失精度就是大量资金出入了。

    一位“黑客”利用银行漏洞从PayPal、Google Checkout和其它在线支付公司窃取了5万多美元,每次只偷几美分。他所利用的漏洞是:银行在开户后一般会向帐号发送小额钱去验证帐户是否有效,数额一般在几美分到几美元左右。Google Checkout和Paypal也使用相同的方法去检验与在线帐号捆绑的信用卡和借记卡帐号。 用一个自动脚本开了58,000个帐号,收集了数以千计的超小额费用,汇入到几个个人银行账户中去。从Google Checkout服务骗到了$8,000以上的现金。银行注意到了这种奇怪的现金流动,和他取得联系,Largent解释他仔细阅读过相关服务条款,相信 自己没做错事,声称需要钱去偿还债务。但Largent使用了假名,包括卡通人物的名字,假的地址和社会保障号码,因此了违反了邮件、银行和电信欺骗法律。别在中国尝试,这要判无期徒刑。

    3 救世的BigDecimal

    我们知道BigDecimal,在浮点数精确表达和运算的场景,一定要使用。不过,在使用BigDecimal时有几个坑需要避开。

    • BigDecimal之前的四则运算

    • 输出

      运算结果还是不精确,只不过是精度高了。

    3.1 BigDecimal表示/计算浮点数且使用字符串构造器

    • 完美输出

    无法调用BigDecimal传入Double的构造器,但手头只有一个Double,如何转换为精确表达的BigDecimal?

    • Double.toString把double转换为字符串可行吗?
    • 输出
      401.5000。
      与上面字符串初始化100和4.015相乘得到的结果401.500相比,这里为什么多了1个0?
      BigDecimal有
      • scale 小数点右边的位数
      • precision 精度,即有效数字的长度

    new BigDecimal(Double.toString(100))得到的BigDecimal的scale=1、precision=4;而
    new BigDecimal(“100”)得到的BigDecimal的scale=0、precision=3。

    BigDecimal乘法操作,返回值的scale是两个数的scale相加。所以,初始化100的两种不同方式,导致最后结果的scale分别是4和3:

    private static void testScale() {
        BigDecimal bigDecimal1 = new BigDecimal("100");
        BigDecimal bigDecimal2 = new BigDecimal(String.valueOf(100d));
        BigDecimal bigDecimal3 = new BigDecimal(String.valueOf(100));
        BigDecimal bigDecimal4 = BigDecimal.valueOf(100d);
        BigDecimal bigDecimal5 = new BigDecimal(Double.toString(100));
    
        print(bigDecimal1); //scale 0 precision 3 result 401.500
        print(bigDecimal2); //scale 1 precision 4 result 401.5000
        print(bigDecimal3); //scale 0 precision 3 result 401.500
        print(bigDecimal4); //scale 1 precision 4 result 401.5000
        print(bigDecimal5); //scale 1 precision 4 result 401.5000
    }
    
    private static void print(BigDecimal bigDecimal) {
        log.info("scale {} precision {} result {}", bigDecimal.scale(), bigDecimal.precision(), bigDecimal.multiply(new BigDecimal("4.015")));
    }
    

    4 浮点数的舍入和格式化

    应考虑显式编码,通过格式化表达式或格式化工具

    4.1 明确小数位数舍入方式

    • 通过String.format使用%.1f格式化double/float的3.35浮点数
    • 结果
      3.4和3.3

    精度问题和舍入方式共同导致:double/float的3.35实际存储表示

    3.350000000000000088817841970012523233890533447265625
    3.349999904632568359375
    

    String.format采用四舍五入的方式进行舍入,取1位小数,double的3.350四舍五入为3.4,而float的3.349四舍五入为3.3。

    我们看一下Formatter类的相关源码,可以发现使用的舍入模式是HALF_UP(代码第11行):

    若想使用其他舍入方式,可设置DecimalFormat

    当把这俩浮点数向下舍入取2位小数时,输出分别是3.35、3.34,还是因为浮点数无法精确存储。

    所以即使通过DecimalFormat精确控制舍入方式,double/float也可能产生奇怪结果,所以

    4.2 字符串格式化也要使用BigDecimal

    • BigDecimal分别使用向下舍入、四舍五入取1位小数格式化数字3.35

    • 结果
      3.3和3.4,符合预期。

    最佳实践:应该使用BigDecimal来进行浮点数的表示、计算、格式化。

    5 equals做判等就一定对?

    包装类的比较要通过equals,而非==。那使用equals对两个BigDecimal判等,一定符合预期吗?

    • 使用equals比较1.0和1这俩BigDecimal:

      结果自然是false。BigDecimal的equals比较的是BigDecimal的valuescale:1.0的scale是1,1的scale是0,所以结果false

    若只想比较BigDecimal的value,使用compareTo

    BigDecimal的equalshashCode会同时考虑valuescale,若结合HashSet/HashMap可能出问题。把值为1.0的BigDecimal加入HashSet,然后判断其是否存在值为1的BigDecimal,得到false

    5.1 解决方案

    5.1.1 使用TreeSet替换HashSet

    TreeSet不使用hashCode,也不使用equals比较元素,而使用compareTo方法。

    5.1.2 去掉尾部的零

    把BigDecimal存入HashSet或HashMap前,先使用stripTrailingZeros方法去掉尾部的零。
    比较的时候也去掉尾部的0,确保value相同的BigDecimal,scale也是一致的:

    6 溢出问题

    所有的基本数值类型都有超出保存范围可能性。

    • 对Long最大值+1
    • 结果是一个负数,Long的最大值+1变为了Long的最小值
      -9223372036854775808

    显然发生溢出还没抛任何异常。

    6.1 解决方案

    6.1.1 使用Math类的xxExact进行数值运算

    这些方法会在数值溢出时主动抛异常。

    执行后,会得到ArithmeticException,这是一个RuntimeException:

    java.lang.ArithmeticException: long overflow
    

    6.1.2 使用大数类BigInteger

    BigDecimal专于处理浮点数的专家,而BigInteger则专于大数的科学计算。

    • 使用BigInteger对Long最大值进行+1操作。若想把计算结果转为Long变量,可使用BigInteger#longValueExact,在转换出现溢出时,同样会抛出ArithmeticException

    • 结果

    9223372036854775808
    java.lang.ArithmeticException: BigInteger out of long range
    

    通过BigInteger对Long的最大值加1无问题,但将结果转为Long时,则会提示溢出。

    参考

    • https://www.eet-china.com/news/201909041104.html
    展开全文
  • SC6600L手机使用手册

    2011-03-16 15:13:27
    6.6.1 常用语设置: 30 6.6.2 语音信箱: 30 6.6.3 小区广播 31 6.6.4 短信设置 31 6.6.5 彩信设置 32 6.6.6 信息容量 32 7. 互联网 34 7.1 输入网址: 34 7.2主页 34 7.3书签 35 7.4 历史记录 35 7.5 离线浏览 35 ...
  • 电工计算.apk.1

    2019-09-06 11:38:12
    电工计算器是电气人员常用工具手机软件,有常用电气公式及各种数据查询,需改后缀
  • 5.常用电话。 6.手机号码归属地查询。 7.火车车次和站点查询。 8.数学计算器。 9.标准体重计算器:成年人,儿童,婴儿体重计算。 10.个人所得税计算器。 11.住房贷款计算器。 12.购房税费计算器。 13.银行存款利息...
  • 常用生活查询集成了身份证信息、手机号段归属、邮编区号查询、常用电话号码、快递查询、度量衡单位换算6项功能,均为日常生活中经常要用到的内容。金融计算存款计算、商业贷款计算、房贷计算、个税计算、汇率换算、...
  • 计算器 万年历 时差查询 时间核对 身份证号查询 手机号码归属 手机真假查询 手机大全 菜谱大全 餐馆搜索 食物营养查询 食物热量查询 疾病搜索 西药药典 中草药 肥胖测试 妇女安全...
  • 线性布局在生活中还是很常见的,比如手机上的计算器,横竖分明,非常好辨别和使用。 线性布局常用的属性: android:gravity:控件自身上面的内容位置 android:layout_gravity:控件本身相对于父控件的显示
  • 口袋工具 v1.4

    2015-01-20 08:17:15
    是不是手机里面有一堆工具应用(天气,万年历,私密相册,PM2.5,计算器,汇率,违章查询等等)?占空间不说,而且太多了到需要用时找都找不到,是不是很头疼? 其实你只需要一个应用搞定这些所有功能就Ok了对不对...
  • 自从有了微信小程序,平均每天打开微信的次数在急剧增加,因为微信小程序,无需下载,无需安装,...这个小程序真的是万能的,一个小程序可以顶多个小程序用,比如里面有我们常用的九宫格切图,计算器,物流查询,二...
  • 2021-03-29

    2021-03-29 17:57:06
    常用DOS命令 #切换目录 cd #清屏 cls clean screen #打开应用 clac #打开计算器 java 的三大版本 javaSE:标准版(桌面程序) JAVAME:嵌入式(手机) JavaEE:企业级开发(web端,服务器开发) jdk jre jvm JDK:Java...
  • 电脑 手机 计算器…俗称是电脑 电子计算机器,是现代⼀种⽤于⾼速计算的电⼦计算机器 特点:数值计算 逻辑计算 存储记忆功能 计算机组成 硬件:显示器 鼠标 键盘CUP等(看得见摸得着的) 软件:微信 QQ等(看不见...
  • 如今它不仅可以作为我们常用的沟通、支付、消费、计算器、记事本等工具,也可以作为地震仪使用,用来检测地震波。 据外媒报道,在全球最为通用的 Android 移动设备中,其内置的加速计可以作为地震仪使用,且能探测到...
  • 欢迎并感谢您使用实创 《个人理财系统》软件。... · 常用计算器 · 股票收益计算器 · 记事本 · 万年历 系统功能: · 数据备份 · 数据恢复 · 理财计划 · 选项 有任何问题与我联系:QQ 452739577
  • 商家把自己设计的应用程序部署到云计算器上。用户可以在各种设备上进行访问,比如网页浏览器、手机浏览器。用户不需要关心网络、服务器、操作系统、存储等,软件的开发、管理、部署都交给第三方,不需要关心技术问题...
  • 这是《Android Studio开发实战...另外,也能学会开发一些趣味应用,包括:简单计算器、房贷计算器、万年历、日程表、手机安全助手、指南针、卫星浑天仪、抠图工具、动感影集、影视播放器、音乐播放器、WIFI共享器等等。
  • 是最常用的编程语言。 第一个用 C 编写的操作系统是 . 后来的操作系统都是用 C 编写的。 C 不仅是操作系统的语言,而且是当今几乎所有最流行的高级语言的先驱和灵感来源。 事实上, 、 、 和 都是用 C 编写的。 打个...
  • 万年历查询、手机号码归属地查询、免费在线翻译、手机话费查询、生肖属相查询、黄金价格走势图、股市行情查询、阿拉伯数字译成英文、省市自治区简称、二十四节气表、女性预产期自测、常用电话号码查询、定时关机工具...

空空如也

空空如也

1 2 3 4 5 6
收藏数 101
精华内容 40
关键字:

手机常用计算器