首页 > 学院 > 开发设计 > 正文

浮点型(float、double)进行计算时不能精确计算(转)

2019-11-11 06:29:37
字体:
来源:转载
供稿:网友
一提到java里面的商业计算,我们都知道不能用float和double,因为他们无法 进行精确计算。但是Java的设计者给编程人员提供了一个很有用的类BigDecimal,他可以完善float和double类无法进行精确计算的缺 憾。BigDecimal类位于java.maths类包下。首先我们来看下如何构造一个BigDecimal对象。它的构造函数很多,我挑最常用的两个 来演示一下:一个就是BigDecimal(double val),另一个就是BigDecimal(String str)。下面是两个浮点数相减的例子来说明:public static void main(String[] args) {double a = 1;double b = 0.9;BigDecimal a1 = new BigDecimal(Double.toString(a));BigDecimal b1 = new BigDecimal(Double.toString(b));BigDecimal a2 = new BigDecimal(a);BigDecimal b2 = new BigDecimal(b);double c = a1.subtract(b1).doubleValue();double d = a2.subtract(b2).doubleValue();System.out.PRintln(“c=”+c);System.out.println(“d=”+d);}结果为:c=0.1d=0.09999999999999998可以得出结论:利用double作为参数的构造函数,无法精确构造一个BigDecimal对象,需要自己指定一个上下文的环境,也就是指定精确位。而利用String对象作为参数传入的构造函数能精确的构造出一个BigDecimal对象。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表