BigDecimal的用法简介
2015-10-29 06:59
232 查看
在Java中,float声明的变量是单精度浮点数,double声明的变量是双精度浮点数,顾名思义就是double型的实体占用内存空间是float的两倍。float是4个字节而double是8个字节。float和double类型的数据,无法精确表示计算结果,这是由于float和double是不精确的计算。大家可以通过下面代码可以看出来:
运行的结果为:
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
要想获得理想的结果,我们可以考虑使用BigDecimal来获得更精确的计算:
BigDecimal提供了多个构造函数,和浮点数有关的有:
BigDecimal(double val) Translates a double into a BigDecimal.
BigDecimal(String val) Translates the String repre sentation of a BigDecimal into a BigDecimal.
但是用double参数来创建对象得到不精确的值,只有通过String来创建对象才是最准确的。
例如:
BigDecimal data1=new BigDecimal(0.05);
System.out.println(data1.toString());
BigDecimal data2=new BigDecimal("0.05");
System.out.println(data2.toString());
得到结果:
0.05000000000000000277555756156289135105907917022705078125
0.05
所以,我们最终需要使用String来创建对象,这样得到的结果才是最精确的。另外,如果是double数,我们还可以使用:BigDecimal.valueOf(double val),原因很简单,其JDK源码如下所示:
最后需要说明的是:BigDecimal的加减乘除其实最终都返回的是一个新的BigDecimal对象,因为BigDecimal是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以a.add(b);虽然做了加法操作,但是a并没有保存加操作后的值,正确的用法应该是a=a.add(b)。
声明: 本文由金丝燕网原创编译,转载请保留链接: BigDecimal的用法简介
1 2 3 4 5 6 7 8 9 10 | public class Test { 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
要想获得理想的结果,我们可以考虑使用BigDecimal来获得更精确的计算:
BigDecimal提供了多个构造函数,和浮点数有关的有:
BigDecimal(double val) Translates a double into a BigDecimal.
BigDecimal(String val) Translates the String repre sentation of a BigDecimal into a BigDecimal.
但是用double参数来创建对象得到不精确的值,只有通过String来创建对象才是最准确的。
例如:
BigDecimal data1=new BigDecimal(0.05);
System.out.println(data1.toString());
BigDecimal data2=new BigDecimal("0.05");
System.out.println(data2.toString());
得到结果:
0.05000000000000000277555756156289135105907917022705078125
0.05
所以,我们最终需要使用String来创建对象,这样得到的结果才是最精确的。另外,如果是double数,我们还可以使用:BigDecimal.valueOf(double val),原因很简单,其JDK源码如下所示:
1 2 3 4 | public static BigDecimal valueOf(double val) { return new BigDecimal(Double.toString(val)); } |
声明: 本文由金丝燕网原创编译,转载请保留链接: BigDecimal的用法简介
相关文章推荐
- java中BigDecimal的操作方法
- Java中BigDecimal类的简单用法
- 使用BigDecimal进行精确运算(实现加减乘除运算)
- Java中使用BigDecimal进行浮点数运算
- BigDecimal类的用法
- Project Euler Problem 80-高精度开方-牛顿逼近法
- 实现double数值的精度加减乘除运算
- java.math.BigDecimal类的用法
- ava BigDecimal详解
- 高精度运算BigDecimal +-*/
- Java float、double使用注意问题
- double保留两位小数
- Java BigDecimal类
- BigDecimal用法
- Double || BigDecimal
- BigDecimal类的简单用法
- 使用 BigDecimal 类进行精确计算
- JAVA中浮点数的精度问题
- BigDecimal介绍
- BigDecimal.setScale 处理java小数点