金融项目java开发_BigDecimal(解决计算精度问题)
当使用double进行商业运算时,double计算会丢失精度。可以使用BigDecimal进行计算。
- import java.math.BigDecimal;
- import org.junit.Test;
- public class TestBigDecimal{
- @Test
- public void test(){
- double a=0.1;
- double b=0.2;
- System.out.println(a+b);
- BigDecimal a1=new BigDecimal("0.1");
- BigDecimal b1=new BigDecimal("0.2");
- System.out.println(a1+b1);
- BigDecimal c1=new BigDecimal("0.23574");
- a1=a1.add(c1);
- a1=a1.setScale(1,BigDecimal.ROUND_DOWN);
- System.out.println(a1);
- }
- }
输出结果如下:
0.30000000000000004
0.3
0.3
double的加减无法精确计算出0.3,而使用BigDecimal却可以。
当然,如果直接将double传给BigDecimal,你会发现不但无法解决精度问题,反而对精度进行了补全。所以,为确保精度,我们将String传给它。
setScale(1)表示保留一位小数,默认用四舍五入方式
setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3
setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4
setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4
.scale() 取精度值,即小数点后位数(注:BigDecimal可以通过setScale来提高精度,只要新设的值比原来的大!
BigDecimal也可以通过setScale来降低精度。因为新设的值比原来的小,所以必须保证原来数值的该位小数点后面都是0,只有这样才可以设比原来小的精度。
例:原来的值是:4.1235648,想把scale设为小于7为都会出错的,如果原来的值是:4.1235000,把scale设为小于4位会出错,而设为4、5、6、7都没有问题,设得更大,肯定不会出错)
add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象。
subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。
multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象。
divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象。
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
例:BigDecimal mData = new BigDecimal("9.655").setScale(2, BigDecimal.ROUND_HALF_UP);
----结果:----- mData=9.66
toString() 将BigDecimal对象的数值转换成字符串。
doubleValue() 将BigDecimal对象中的值以双精度数返回。
floatValue() 将BigDecimal对象中的值以单精度数返回。
longValue() 将BigDecimal对象中的值以长整数返回。
intValue() 将BigDecimal对象中的值以整数返回。
相关文章
- java对cookie的操作
- 适合Java开发者学习的Python入门教程
- Effective Java 第三版——6. 避免创建不必要的对象
- wJa丨Java闭源项目的自动化测试
- 《JAVA与模式》之调停者模式
- [Effective Java]第七章 方法
- 你的Java代码是否符合规范,来测测便知!
- 从零构建Java项目(Maven+SpringBoot+Git) #02 奥斯丁项目
- 开发维护大型 Java 项目的建议
- Java面试题
- 玩转Java开源项目
- Java开发笔记之项目启动报错expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.spr...
- [转载]java的传值和传引用
- 国内最火的10款Java开源项目,都是国人开发,CMS居多
- MyEclipse开发的java web项目在 Eclipse中无法识别
- 图文详解 IntelliJ IDEA 15 创建 Maven 构建的 Java Web 项目(使用 Jetty 容器)
- Java应用程序项目的打包与发行
- java springboot项目 相对路径获取
- Java学习——基本数据类型
- 【项目精选】JAVA_JSP电子政务网(源码+视频+论文)
- 【项目精选】基于Java的敬老院管理系统的设计和实现
- Java协程编程之Loom项目尝鲜
- Java 获取webapp,Root,classpath,项目等路径工具类
- 使用Gradle构建Java项目
- Java程序打开指定地址网页
- java-开发各种Java示例项目
- java项目编码格式转换(如GBK转UTF-8)
- 运用加密技术保护Java源代码/定制ClassLoader
- linux部署项目(Java项目+Tomcat+mysql)
- Java泛型的介绍与详解Gson泛型解析
- JAVA设计模式——第 2 章 代理模式【Proxy Pattern】(转)
- 实战突击: Java Web项目整合开发(PDF)
- 配置好solr搜索引擎服务器后java后台如何将商品信息导入索引库
- LeetCode-21. 合并两个有序链表(java)
- maven maven-war-plugin 解决java war项目间的依赖(两个war都可独立部署运行,maven 3.2.x亲测)
- 最近面试Java后端开发的感受:如果就以平时项目经验来面试,通过估计很难