package com.BigDecimal;

public class BigDecimalDemo {
/*
* 下面的运算的结果出乎我们的意料,有些准确,有些不准确
* 这是为什么呢?
* 我们知道,数据进行运算时先将它转换成为补码进行运算,所以就设计到一个二进制转换的问题
* 浮点数的小数点后面的数是乘以2得1 0计算二进制的对吧,因为有些小数无论如何就是不能得到0,
* 也就是一个无限的小数类,这样的数据永远无法得到完整的10表示,所以float和double操作时候
* 出现一个叫做有效数字的说法。当然后面一个是可以的,那是因为两个浮点数刚好可以转换好0101
* 这是因为浮点数的存储和整形的存储不同导致的。它们大部分的时候,都是带有有效数字位
* 引出BigDecimal
* 由于在运算的时候,float类型和double很容易丢失精度。所以,为了能精确的表示、计算浮点数,java提供了BigDecimal
* BigDecimal类概述
* 不可变的,任意精度的有符号十进制数。可以解决精度丢失问题
*/
public static void main(String[] args) {
System.out.println(0.09+0.01);//0.09999999999999999
System.out.println(1.0-0.32);//0.6799999999999999
System.out.println(1.015*100);//101.49999999999999
System.out.println(1.301/100);//0.013009999999999999 System.out.println(1.0-0.12);//0.88
} } package com.BigDecimal; import java.math.BigDecimal; /*
* 构造方法
* public BigDecimal(String val)
*
* public BigDecimal add(BigDecimal augend) :加
* public BigDecimal subtract(BigDecimal subtrahend) 减
* public BigDecimal multiply(BigDecimal multiplicand) 乘
* public BigDecimal divide(BigDecimal divisor) 除
* public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode) 商 几位小数 如何舍取
*
*
*/
public class BigDecimalDemo02 {
public static void main(String[] args) {
// System.out.println(0.09+0.01);//0.09999999999999999
// System.out.println(1.0-0.32);//0.6799999999999999
// System.out.println(1.015*100);//101.49999999999999
// System.out.println(1.301/100);//
BigDecimal bd1=new BigDecimal("0.09");
BigDecimal bd2=new BigDecimal("0.01");
System.out.println("add:"+bd1.add(bd2));
System.out.println("--------------------------"); BigDecimal bd3=new BigDecimal("1.0");
BigDecimal bd4=new BigDecimal("0.32");
System.out.println("subtract:"+bd3.subtract(bd4));
System.out.println("--------------------------"); BigDecimal bd5=new BigDecimal("1.015");
BigDecimal bd6=new BigDecimal("100");
System.out.println("multiply:"+bd5.multiply(bd6));
System.out.println("--------------------------"); BigDecimal bd7=new BigDecimal("1.301");
BigDecimal bd8=new BigDecimal("100");
System.out.println("divide:"+bd7.divide(bd8));
System.out.println("--------------------------");
System.out.println("divide:"
+bd7.divide(bd8,3,BigDecimal.ROUND_HALF_UP));//ROUND_HALF_UP四舍五入,其他方式舍取看API
System.out.println("divide:"
+bd7.divide(bd8,8,BigDecimal.ROUND_HALF_UP));
}
}
package com.BigInteger;

import java.math.BigInteger;

public class BigIntegerDemo {
/*
* 引入BigInteger
* Integer的范围是太小了,无法进行大的整数运算
* java.math
* 不可变的任意精度的整数。所有操作都以二进制补码进行,说明运算效率高
* 讲一个构造:
* BigInteger(String val)
* 3个常量:
* static BigInteger ONE :常量1
* static BigInteger TEN :常量10
* static BigInteger ZERO :常量0
* 一个方法:
* static valueOf(long val) 返回其值等于指定long值得BigInteger
*/
public static void main(String[] args) {
//这几个测试是为了检测超过int范围内,Integer不能在表示,更谈不上计算
/*Integer i=new Integer(100);
System.out.println(i);
System.out.println(Integer.MAX_VALUE);
Integer ii=new Integer("2147483647");
System.out.println(ii);
Integer iii=new Integer("2147483648");*/ BigInteger bi=new BigInteger("2147483648");
System.out.println(bi);//看出重写了toString()
} } package com.BigInteger; import java.math.BigInteger; /*
* 介绍几个常用方法,其他查看API
* public BigInteger add(BigInteger val):加
* public BigInteger subtract(BigInteger val):减
* public BigInteger multiply(BigInteger val):乘
* public BigInteger divide(BigInteger val):除
* public BigInteger[] divideAndRemainder(BigInteger val) 商和摩的数组
*/
public class BigIntegerDemo2 {
public static void main(String[] args) {
BigInteger bi1=new BigInteger("100");
BigInteger bi2=new BigInteger("50");
System.out.println("add:"+bi1.add(bi2));
System.out.println("subtract:"+bi1.subtract(bi2));
System.out.println("multiply:"+bi1.multiply(bi2));
System.out.println("divide:"+bi1.divide(bi2));
System.out.println("divideAndRemaunder:"+bi1.divideAndRemainder(bi2)[0]+"\t"+bi1.divideAndRemainder(bi2)[1]); } }

BigDecimal 、BigInteger的更多相关文章

  1. Java 之 数学相关类 Math、BigInteger、BigDecimal

    一.java.lang.Math 类 一.Math 类概述 java.lang.Math 类包含用于执行基本数学运算的方法,如指数.对数.平方根和三角函数.类似于这样的类,其所有方法均为静态方法,并且 ...

  2. java常用类详细介绍及总结:字符串相关类、日期时间API、比较器接口、System、Math、BigInteger与BigDecimal

    一.字符串相关的类 1.String及常用方法 1.1 String的特性 String:字符串,使用一对""引起来表示. String声明为final的,不可被继承 String ...

  3. Java中的常用类:包装类、String、StringBuffer、StringBuilder、Math、System、Arrays、BigInteger、BigDecimal、Data、Calendar

    一.包装类 √ 二.String类 ★ 三.StringBuffer和StringBuilder类 ★ 四.Math类 五.System类 六.Arrays类 七.BigInteger类和BigDec ...

  4. 经常使用的系统类Math、Arrays、System、BigInteger和BigDecimal以及日期类,时间戳

    一.Math 常用类: //看看Math常用的方法(静态方法)//1.abs绝对值int abs = Math . abs(-9);System. out . printLn(abs);//9//2. ...

  5. [Day17]常用API(System、Math、Arrays、BigInteger、BigDecimal)

    1.基本类型包装类 1.1 8种基本类型对应的包装类 字节型 byte Byte 短整型 short Short 整型 int Integer 长整型 long Long 字符型 char Chara ...

  6. 正则表达式、Calendar类、SimpleDateFormat类、Date类、BigDecimal类、BigInteger类、System类、Random类、Math类(Java基础知识十四)

    1.正则表达式的概述和简单使用 * A:正则表达式(一个字符串,是规则)     * 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则.有自己特殊的应用. * B: ...

  7. [常用类]Math、Random、System、BigInteger、BigDecimal

    Math类中的成员全是静态成员,构造方法是 私有的,以避免被创建对象 常用方法: int abs() double ceil() //向上取整 double floor() //向下取整 int ma ...

  8. Math类、Random类、System类、BigInteger类、BigDecimal类、Date类、SimpleDateFormat、Calendar类

    Math类* A:Math类概述 * Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数. * B:成员方法 * public static int abs(int a)  ...

  9. Java学习笔记26(Math类、Arrays类、BigInteger类、BigDecimal类)

    Math类:数学工具类,做一些数学计算,开方,对数,三角函数等 所有方法都是静态方法,不需要建立对象,直接用类名调用即可 示例: 这里写几个在日常开发中会用到的,比如三角函数之类的平时不会用到,了解即 ...

随机推荐

  1. C#基础整理(一)

    1.什么是.net? .net有.net平台和.Net Framework框架. .net平台是包含.net framework框架. framework框架提供稳定的运行环境来保证基于.Net平台开 ...

  2. synchronized修饰的方法之间相互调用

    1:synchronized修饰的方法之间相互调用,执行结果为There hello  ..因为两个方法(main,hello)的synchronized形成了互斥锁.  所以当main方法执行完之后 ...

  3. Missing Number-[回溯][难]

    2. Missing number 转自:https://mp.weixin.qq.com/s/WLRXLdi-3igkjtiWlHg7Ug Given a positive integer n(n≤ ...

  4. 数据挖掘-关联分析 Apriori算法和FP-growth 算法

    •1.关联分析概念 关联分析是从大量数据中发现项集之间有趣的关联和相关联系. ​ •定义:1.事务:每一条交易称为一个事务,如上图包含5个事务.2.项:交易的每一个物品称为一个项,例如豆奶,啤酒等. ...

  5. Could not load file or assembly 'Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0, ...

    使用oracle数据库一个多月依赖这问题一直都得不到解决,最近任务不是很忙了,所以决定把这问题解决掉.写一篇文章做记录. 以上错误主要是net程序oracle数据库使用了Microsoft Enter ...

  6. Smarty小结提纲

    Smarty:模板技术 实现功能:前后分离. 原理:主要通过Smarty核心类实现,调用display方法,将模板文件读取,用正则进行替换,替换完保存到临时文件,将临时文件加载到当前页面. 配置文件( ...

  7. 20165207 预备作业3 Linux安装及学习

    Linux安装及学习 假期我没有把我的电脑带回家,受到家里的台式机内存和网吧的一些条件的限制我只在台式机安装了32位系统然后学习了实验楼的Vim课程以及Linux的前八课. 问题与解决 安装过程 我家 ...

  8. navicat中文破解版,navicat破解版,navicat for mysql10.0.11简体中文破解版

    https://blog.csdn.net/weixin_40426638/article/details/78933585 下载链接如下(里面有破解码) https://pan.baidu.com/ ...

  9. python基础之多线程锁机制

    GIL(全局解释器锁) GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,是为了实现不同线程对共享资源访问的互斥,才引入了GIL 在Cpython解释器 ...

  10. 20145122《Java程序设计》第一周学习总结

    这周的JAVA学习开始了. 首先我了解JVM.JRE与JDK的区别与联系.JDK : (Java开发工具包).JDK是整个Java的核心,包括了Java运行环境JRE.Java工具和Java基础类库等 ...