BigDecimal 、BigInteger
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的更多相关文章
- Java 之 数学相关类 Math、BigInteger、BigDecimal
一.java.lang.Math 类 一.Math 类概述 java.lang.Math 类包含用于执行基本数学运算的方法,如指数.对数.平方根和三角函数.类似于这样的类,其所有方法均为静态方法,并且 ...
- java常用类详细介绍及总结:字符串相关类、日期时间API、比较器接口、System、Math、BigInteger与BigDecimal
一.字符串相关的类 1.String及常用方法 1.1 String的特性 String:字符串,使用一对""引起来表示. String声明为final的,不可被继承 String ...
- Java中的常用类:包装类、String、StringBuffer、StringBuilder、Math、System、Arrays、BigInteger、BigDecimal、Data、Calendar
一.包装类 √ 二.String类 ★ 三.StringBuffer和StringBuilder类 ★ 四.Math类 五.System类 六.Arrays类 七.BigInteger类和BigDec ...
- 经常使用的系统类Math、Arrays、System、BigInteger和BigDecimal以及日期类,时间戳
一.Math 常用类: //看看Math常用的方法(静态方法)//1.abs绝对值int abs = Math . abs(-9);System. out . printLn(abs);//9//2. ...
- [Day17]常用API(System、Math、Arrays、BigInteger、BigDecimal)
1.基本类型包装类 1.1 8种基本类型对应的包装类 字节型 byte Byte 短整型 short Short 整型 int Integer 长整型 long Long 字符型 char Chara ...
- 正则表达式、Calendar类、SimpleDateFormat类、Date类、BigDecimal类、BigInteger类、System类、Random类、Math类(Java基础知识十四)
1.正则表达式的概述和简单使用 * A:正则表达式(一个字符串,是规则) * 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则.有自己特殊的应用. * B: ...
- [常用类]Math、Random、System、BigInteger、BigDecimal
Math类中的成员全是静态成员,构造方法是 私有的,以避免被创建对象 常用方法: int abs() double ceil() //向上取整 double floor() //向下取整 int ma ...
- Math类、Random类、System类、BigInteger类、BigDecimal类、Date类、SimpleDateFormat、Calendar类
Math类* A:Math类概述 * Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数. * B:成员方法 * public static int abs(int a) ...
- Java学习笔记26(Math类、Arrays类、BigInteger类、BigDecimal类)
Math类:数学工具类,做一些数学计算,开方,对数,三角函数等 所有方法都是静态方法,不需要建立对象,直接用类名调用即可 示例: 这里写几个在日常开发中会用到的,比如三角函数之类的平时不会用到,了解即 ...
随机推荐
- 简单的共享文件http
如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等.那么, Python 可能帮助你.使用Python可以完成一个简单的内建 HT ...
- js-template-art【一】简述
一.官方地址 地址:https://github.com/aui/art-template 二.概述 官方对比 三.特性 拥有接近 JavaScript 渲染极限的的性能 调试友好:语法.运行时错误日 ...
- C#+GDAL读写文件
读取shp文件: private void btnBrower_Click(object sender, EventArgs e) { OpenFileDialog dlg = new OpenFil ...
- 百度天气接口api
百度天气接口 以GET形式提交,返回JSON或XML URL:http://api.map.baidu.com/telematics/v3/weather?location={城市名}&out ...
- in 和 or 的效率问题
select * from table where col in (2,3,4,5,6) select * from table where col=2 or col=3 or col=4 or co ...
- 窄依赖与宽依赖&stage的划分依据
RDD根据对父RDD的依赖关系,可分为窄依赖与宽依赖2种. 主要的区分之处在于父RDD的分区被多少个子RDD分区所依赖,如果一个就为窄依赖,多个则为宽依赖.更好的定义应该是: 窄依赖的定义是子RDD的 ...
- 禁止复制操作 --《C++必知必会》条款32
class NoCopy{ private: //声明为私有的,则外部不可访问,即:不可复制 NoCopy(const NoCopy & );//复制构造函数 NoCopy & ope ...
- python socket编程 实现简单p2p聊天程序
目标是写一个python的p2p聊天的项目,这里先说一下python socket的基础课程 一.Python Socket 基础课程 Socket就是套接字,作为BSD UNIX的进程通信机制,取后 ...
- Java面向对象---重写(Override)与重载(Overload)
一.重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说 ...
- bzoj1999 / P1099 树网的核
P1099 树网的核 (bzoj数据加强) 前置知识:树的直径 (并不想贴我的智障写法虽然快1倍但内存占用极大甚至在bzoj上MLE) 正常写法之一:用常规方法找到树的直径,在直径上用尺取法找一遍,再 ...