美文网首页
BigInteger BigDecimal

BigInteger BigDecimal

作者: Phoebe_Liu | 来源:发表于2018-10-24 16:13 被阅读0次

    原文链接:https://blog.csdn.net/zhongkelee/article/details/52289163
    基础知识
    对于二进制来说,最高位代表正负号,-0表示-128,+0表示0
    32位系统int型4个字节:-(2的31次方) ~ (2的31次方) 减 1
    最大负数:10000000 00000000 00000000 00000000
    最大正数:01111111 11111111 11111111 11111111
    0: 00000000 00000000 00000000 00000000

    64位系统同理,int型表示范围是:-(2的63次方) ~ (2的63次方) 减 1

    大数操作
    正常情况下一个整数最多只能放在long类型之中,但是如果现在有如下的一个数字:
    1111111111111111111111111111111111111111111111111
    根本就是无法保存的,所以为了解决这样的问题,在java中引入了两个大数的操作类:
    操作整型:BigInteger
    操作小数:BigDecimal
    当然了,这些大数都会以字符串的形式传入。

    华为机试题
    现在我们来看一道华为的机试题:

        写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
    
    package huawei.job;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.math.BigInteger;
     
    public class Main5 {
     
        public static void main(String[] args) {
            BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
            String line ;
            BigInteger base = new BigInteger("16"); // 相当于2进制2^4中的底数一样,16是16进制的底数
            try {
                while((line = bufr.readLine()) != null){
                    line = line.substring(2); // 这里是因为:16进制的开头一般是0X,要去掉
                    BigInteger result = new BigInteger("0");
                    for(int i = 0; i < line.length(); i++){
                        char ch = line.charAt(line.length()-1-i);
                        if(ch >= 'A' && ch <= 'F'){
                            BigInteger tmp = base.pow(i).multiply(new BigInteger(Integer.toString((ch - 'A' + 10))));
                            result = result.add(tmp);
                        }else{
                            BigInteger tmp = base.pow(i).multiply(new BigInteger(Character.toString(ch)));
                            result = result.add(tmp);
                        }
                    }
                    System.out.println(result);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    BigDecimal也可以用于解决: 浮点数保留小数的问题

    double   f   =   111231.5585;  
    BigDecimal   b   =   new   BigDecimal(f);  
    double   f1   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();  
    保留两位小数  
    

    还有其他两种方法

    方式二:
    
    java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");  
    String d = df.format(你要格式化的数字);
    
    例:new java.text.DecimalFormat("#.00").format(3.1415926)
    
    #.00 表示两位小数 #.0000四位小数 以此类推...
    
    方式三:
    
    double d = 3.1415926;
    
    String result = String .format("%.2f");
    
    %.2f %. 表示 小数点前任意位数   2 表示两位小数 格式后的结果为f 表示浮点型
    

    相关文章

      网友评论

          本文标题:BigInteger BigDecimal

          本文链接:https://www.haomeiwen.com/subject/uirxtqtx.html