概述
BigDecimal用于对超过16位有效位的数进行精确计算
常用构造方法
1、BigDecimal(int)
创建一个具有参数所指定整数值的对象
2、BigDecimal(double)
创建一个具有参数所指定双精度值的对象
3、BigDecimal(long)
创建一个具有参数所指定长整数值的对象
1、BigDecimal(String)
创建一个具有参数所指定字符串表示的数值的对象
问题分析
代码示例:
BigDecimal a = new BigDecimal(0.1);
BigDecimal b = new BigDecimal("0.1");
System.out.println("a:"+ a);
System.out.println("b:"+ b);
输出:
a:0.1000000000000000055511151231257827021181583404541015625
b:0.1
原因分析:
参数类型为double的构造方法的结果有一定的不可预知性,实际等于 0.1000000000000000055511151231257827021181583404541015625,因为0.1无法准确的表示为double;
String的构造方法是完全可预知的,b的值即为预知的0.1。
常用方法:
-
add(BigDecimal)
BigDecimal对象中的值相加,返回BigDecimal对象
-
subtract(BigDecimal)
BigDecimal对象中的值相减,返回BigDecimal对象
-
multiply(BigDecimal)
BigDecimal对象中的值相乘,返回BigDecimal对象
-
divide(BigDecimal)
BigDecimal对象中的值相除,返回BigDecimal对象
-
toString()
将BigDecimal对象中的值转换成字符串
-
doubleValue()
将BigDecimal对象中的值转换成双精度数
-
floatValue()
将BigDecimal对象中的值转换成单精度数
-
longValue()
将BigDecimal对象中的值转换成长整数
-
intValue()
将BigDecimal对象中的值转换成整数
-
compareTo(BigDecimal2)
将调用该方法的BigDecimal对象与BigDecimal2做比较
int a = bigdemical.compareTo(bigdemical2)
返回结果分析:
a = -1,表示bigdemical小于bigdemical2;
a = 0,表示bigdemical等于bigdemical2;
a = 1,表示bigdemical大于bigdemical2;
如果需要传如double类型的数值到BigDecimal,建议使用如下方法:
BigDecimal b1 = new BigDecimal(Double.toString(v1));
最后
以上就是大气荷花为你收集整理的BigDecimal失真问题的全部内容,希望文章能够帮你解决BigDecimal失真问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复