JAVA大数类 BigInteger和BigDecimal用法
2016-04-03 21:47
369 查看
BigInteger四则运算
BigDecimal常用四则运算
做除法运算的时候一定要说明scale,不然可能会由于无限循环小数而抛出异常,最后的格式化输出还是交给format来做比较好
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { BigInteger num1, num2; Scanner in = new Scanner(System.in); while (in.hasNext()) { num1 = in.nextBigInteger(); num2 = in.nextBigInteger(); System.out.println("和:" + num1.add(num2)); System.out.println("差:" + num1.subtract(num2)); System.out.println("积:" + num1.multiply(num2)); BigInteger res[] = num1.divideAndRemainder(num2); System.out.println("商:" + res[0]); System.out.println("余数:" + res[1]); } in.close(); } }
BigDecimal常用四则运算
import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.Scanner; public class Main { public static void main(String[] args) { final boolean db = true; BigDecimal num1, num2; Scanner in = new Scanner(System.in); while (in.hasNext()) { num1 = in.nextBigDecimal(); num2 = in.nextBigDecimal(); //注意add,subtract,multiply,divide返回的是一个做完运算的对象的引用,比如 //num1.add(num2)返回的是值为num1 + num2的一个对象的引用,但是 //对num1本身没有做修改,若想做例如num1 += num2的操作需要num1 = num1.add(num2); System.out.println("和:" + num1.add(num2)); System.out.println("差:" + num1.subtract(num2)); System.out.println("积:" + num1.multiply(num2)); //如果不设置第二个参数scale的话,遇到1 / 3 = 0.333...这种无限循环小数会抛出异常 System.out.println("商:" + num1.divide(num2, 3, BigDecimal.ROUND_HALF_UP)); //使用DecimalFormat格式化输出 DecimalFormat df = new DecimalFormat("#.000"); String ans = df.format(num1); System.out.println(ans); //使用setScale格式化输出,但是setScale会去小数位末尾的0 String res = num1.setScale(2, BigDecimal.ROUND_HALF_UP).toString(); System.out.println(res); System.out.println("以下为测试:"); BigDecimal b0=new BigDecimal("1.00000000"); System.out.println(b0.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); if (db) { //感觉还是format比较靠谱,便于最终的输出格式的控制 ans = df.format(b0); System.out.println("使用format:" + ans); } BigDecimal b1=new BigDecimal("1.00000010"); System.out.println(b1.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b2=new BigDecimal("1.00000020"); System.out.println(b2.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b3=new BigDecimal("1.00000030"); System.out.println(b3.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b4=new BigDecimal("1.00000040"); System.out.println(b4.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b5=new BigDecimal("1.00000050"); System.out.println(b5.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b6=new BigDecimal("1.00000060"); System.out.println(b6.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b7=new BigDecimal("1.00000070"); System.out.println(b7.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b8=new BigDecimal("1.00000080"); System.out.println(b8.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b9=new BigDecimal("1.00000090"); System.out.println(b9.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); // 以下为测试: // 1.0 // 1.0 // 1.0 // 1.0 // 1.0 // 1.000001 // 1.000001 // 1.000001 // 1.000001 // 1.000001 } in.close(); } }
做除法运算的时候一定要说明scale,不然可能会由于无限循环小数而抛出异常,最后的格式化输出还是交给format来做比较好
相关文章推荐
- 20145221 《Java程序设计》第五周学习总结
- Java重写方法与初始化的隐患(转)
- Spring(四)注解配置Ioc
- Spring(三)AOP面向切面编程
- (第7讲)java基本数据类型转换
- Spring(二)scope、集合注入、自动装配、生命周期
- Java泛型总结
- 20144303 《Java程序设计》第五周学习总结
- eclipse 使用Git版本控制,removve Push 报错“Error writing request body to server”
- 蛇形矩阵Java实现
- Java - Socket
- Java对象序列化
- Java的switch语句
- java遍历全盘文件时出现空指针异常
- JAVA命名、注释规范
- Semaphore(Java 信号量)
- Java集合类操作优化经验总结
- 20145314郑凯杰 《Java程序设计》第5周学习总结
- 【笔记】 《js权威指南》- 第9章 类和模块 - 9.3 Java式继承
- java中Int与String的相互转化方法