java.math.BigDecimal()的用法
Java中简单的浮点数类型float和double是不能进行运算的,不光Java,很多语言都是这样。
我们运行下面程序你将会看到
public class TestMathDecimal {
public static void main(String [] args){
System.out.println(0.05+0.01);
System.out.println(1.0 - 0.42);
System.out.println(4.015 * 100);
System.out.println(123.3 / 100);
}
}
没错,结果确实是:
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
我们的第一反应是做四舍五入。Math中的roound是不能够设置保留几位小数的。
Math.round(4.015 * 100)的结果为401,而不是我们期望的402。
因此如果我们要进行精确的四舍五入,不能利用简单类型做任何运算。
java.text.DecimalFormat也不能解决这个问题:
System.out.println(new java.text.DecimalFormat("0.00").format(4.015));输出的是4.02。
BigDecimal
在商业计算中我们要用java.math.BigDecimal.BigDecimal有四个构造方法,我们不关心BigInteger来构造的那两个,还有两个分别是:
BigDecimal(double val)
BigDecimal(String val)
除法运算:
System.out.println(new BigDecimal(153.5).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP));
new BigDecimal(100)除数,2精确的位数,BigDecimal.ROUND_HALF_UP:舍入模式
加法运算:
System.out.println(new BigDecimal("2.005").add(new BigDecimal("0.03")));
减法运算:
System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.10")));
乘法运算:
System.out.println(new BigDecimal("2.05").multiply(new BigDecimal("10")));
ps:此处可能说的不是很清楚,以后会继续更新的。
java.math.BigDecimal()的用法的更多相关文章
- java.math.BigDecimal类multiply的使用
java.math.BigInteger.multiply(BigInteger val) 返回一个BigInteger,其值是 (this * val).声明 以下是java.math.BigInt ...
- 【java】Java.math.BigDecimal.subtract()方法实例
java.math.BigDecimal.subtract(BigDecimal subtrahend) 返回一个BigDecimal,其值为 (this - subtrahend), 精度为 max ...
- Java.math.BigDecimal.abs()方法
java.math.BigDecimal.abs()返回一个BigDecimal,其值是此BigDecimal的绝对值,其标度是this.scale(). 声明 以下是java.math.BigDec ...
- java.math.BigDecimal类
BigDecimal类用于高精度计算.一般的float型和Double型数据只可以用来做科学计算或者是工程计算,由于在商业计算中,要求的数字精度比较高,所以要用到java.math.BigDecima ...
- 数据转换失败 java.math.BigDecimal cannot be cast to java.lang.String
从接口获取到数据,在转换的时候出现错误:java.math.BigDecimal cannot be cast to java.lang.String 因为一开始用的是使用关键字进行强制转换,后来发现 ...
- 数据转换bug花了半天时间 Java.math.BigDecimal cannot be cast to java.lang.String
从数据库取出一个 Count函数 统计的值 在代码中要转成Integer类型的时候 Integer.parseInt((String)map.get("ID_")) 报了一下错误: ...
- MySQL分段统计SQL写法 与 Mybatis 异常 java.math.BigDecimal cannot be cast to java.lang.Integer
mysql> select end) as '<60', end) as '60~69', end) as '70~79', end) as '80~89', end) as '>= ...
- java.math.BigDecimal
package day14; import java.math.BigDecimal; /** * Created by admin on 2018/11/24. * 看程序写结果:结果和我们想的有一 ...
- Java-API:java.math.BigDecimal
ylbtech-Java-API:java.math.BigDecimal 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 1. https://docs.ora ...
随机推荐
- Java 基础类型转换byte数组, byte数组转换基础类型
Java 基础类型转换byte数组, byte数组转换基础类型 Java类型转换 java类对象转化为byte数组
- Delphi 内存与指针
源:Delphi 内存与指针 Delphi 的内存操作函数(1): 给字符指针分配内存 Delphi 的内存操作函数(2): 给数组指针分配内存 Delphi 的内存操作函数(3): 给结构体指针分配 ...
- time.setToNow() 取当前时间,月份有误
[java] view plaincopy Time time = new Time("GMT+8"); time.setToNow(); int year = time.ye ...
- make 要点简记
make 要点简记 1.隐式推导 make可以自动推导文件及其文件依赖关系后面的命令,所以我们没有必要在每一个.o文件后面都写上类似的命令,因为make 会自动识别并且自动推导命令. objects ...
- 1)Linux学习笔记:crontab命令
crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程 配置文件 ``` SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin: ...
- func 和action 委托的使用
func 可以带返回值,action 不带返回值 平时我们如果要用到委托一般都是先声明一个委托类型,比如: private delegate string Say(); string说明适用于这个委 ...
- PHP连接和拆分数组array_combine()和array_slice()用法示例
一提起数组,可能很多PHP初学者会觉得难,但开发一些高级应用的时候,又离不开数组的使用.下面就来说下,PHP使用array_combine()函数来连接数组.用array_slice()函数来拆分数组 ...
- 最简化模型——css3分阶段动画效果(经过实测)
body { background: #dcdcdc; -webkit-animation: colorin 5s; /* chrome调用属性 */ animation: colo ...
- NodeMCU之旅(二):断线自动重连,闪烁连接状态
事件监听器 NodeMCU采用了事件响应的方式.也就是说,只需为事件设置一个回调函数,当事件发生时,回调函数就会被调用. 注册事件监听器 wif.sta.eventMonReg() 开始监听 wifi ...
- HDU-1754-I Hate It(线段树,简单,不过好像有点问题)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1754 题目不难,不过开始我犯了一个低级错误,输入n,m,m代表操作的数目,我没有写了,写代码的时候,就 ...