美文网首页
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