想要系统学习JAVA推荐JAVA300集
Java300集零基础适合初学者视频教程←点击
Java中BigDecimal类的介绍和用法
Java提供了具有大数(大于16位)的操作类,即Java .math. bininteger类和Java .math. bigdecimal类,用于高精度计算。
BigInteger类是一个处理大整数的类,而BigDecimal类是一个处理大数字和小数字的类。
BigDecimal类的实现使用了BigInteger类,只不过BigDecimal添加了小数的概念。
浮点数和双精度数只能用于科学或工程计算; 在需要数字精度的商业计算中,必须使用BigInteger和BigDecimal类,它们支持任意精度的定点数,可以用来精确计算货币值。
BigDecimal类创建的对象不能直接使用传统的+、-、*、/算术运算符进行数学计算,但必须调用它们相应的方法。 方法参数也必须是BigDecimal类型的对象。
一、构造BigDecimal 对象常用方法
1、方法一
BigDecimal BigDecimal(double d); //不允许使用
2、方法二
BigDecimal BigDecimal(String s); //常用,推荐使用
3、方法三
static BigDecimal valueOf(double d); //常用,推荐使用
注意:
1. 双构造函数不允许使用!!!! 因为它没有得到准确的值,它会变大;
2. String构造函数是完全可以预测的:写入new BigDecimal("0.1")将创建一个BigDecimal,它完全等于预期的0.1; 因此,通常建议优先使用String构造函数;
3. 静态方法valueOf(double val)内部实现,仍然double to String; 这通常是将double(或float)转换为BigDecimal的首选方法;
测试代码如下:
package com.qiyuan.util;
import java.math.BigDecimal;
public class orderCode {
public static void main(String[] args) {
double d1 = 0.10334;
double d2 = 1234.0;
System.out.println("new BigDecimal("+d1+")=" + new BigDecimal(d1)); //此种方式绝对不允许!!!!!
System.out.println("new BigDecimal("+d2+")=" + new BigDecimal(d2)); //此种方式绝对不允许!!!!!
System.out.println("");
System.out.println("new BigDecimal(String.valueOf("+d1+"))=" + new BigDecimal(String.valueOf(d1)));
System.out.println("new BigDecimal(String.valueOf("+d2+"))=" + new BigDecimal(String.valueOf(d2)));
System.out.println("");
System.out.println("new BigDecimal(String.valueOf("+d1+"))=" + new BigDecimal(Double.toString(d1)));
System.out.println("new BigDecimal(String.valueOf("+d2+"))=" + new BigDecimal(Double.toString(d2)));
System.out.println("");
System.out.println("BigDecimal.valueOf("+d1+")=" + BigDecimal.valueOf(d1));
System.out.println("BigDecimal.valueOf("+d2+")=" + BigDecimal.valueOf(d2));
System.out.println("");
BigDecimal b1 = BigDecimal.valueOf(1);
BigDecimal b2 = BigDecimal.valueOf(1.00000);
System.out.println(b1.equals(b2));
System.out.println(b1.compareTo(b2));
}
}
输出如下:
new BigDecimal(0.10334)=0.10334000000000000130118138486068346537649631500244140625
new BigDecimal(1234.0)=1234
new BigDecimal(String.valueOf(0.10334))=0.10334
new BigDecimal(String.valueOf(1234.0))=1234.0
new BigDecimal(String.valueOf(0.10334))=0.10334
new BigDecimal(String.valueOf(1234.0))=1234.0
BigDecimal.valueOf(0.10334)=0.10334
BigDecimal.valueOf(1234.0)=1234.0
false
0