金融项目java开发_BigDecimal(解决计算精度问题)
来源:互联网 发布:淘宝排名突降 编辑:程序博客网 时间:2024/06/07 17:27
当使用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.4
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开发_BigDecimal(解决计算精度问题)
- java 精度计算问题
- 【Java】解决计算浮点数精度问题(BigDecimal)
- java中解决double计算精度不准确问题
- java 数字计算精度问题
- Java计算double精度问题
- js金额计算解决精度问题
- 解决Java中的精度问题
- p2p项目金钱计算缺少精度问题
- java 解决乘除计算丢失精度
- java中数值计算的精度问题
- Java中数值计算的精度问题
- js,java小数计算精度问题
- java float计算精度丢失问题剖析
- java中的数据精度计算问题
- Java 各数据类型计算的精度问题
- Java浮点数计算精度问题总结
- java中double计算精度问题
- Android——屏幕适配与多语言支持
- Spring的bean管理
- 第四十讲项目2——【水仙花数】
- 易语言较稳定的发信写法
- Geekband c++ 第一周(侯捷主讲)
- 金融项目java开发_BigDecimal(解决计算精度问题)
- 2017 Tencent实习编程题
- eclipse Kepler tomcat内存溢出解决方案
- Android 4.4.2 横屏应用如何隐藏状态栏和底部虚拟键
- POJ 3487 The Stable Marriage Problem(稳定婚姻问题)
- Http协议
- 软件测试方法大汇总
- MySql安装与使用图文教程
- 使用#define ##拼接函数,模式化注册函数(ffmpeg 中的av_register_all)