使用Java中BigDecimal类应该注意的问题

Sun Apr 26 17:12:28 CST 2015 648 Java

文章摘要在Java开发中,如果需要精确地处理一些数值相关问题,那么往往需要用到BigDecimal这个类。如货币变量。

由于float,double类型是为了科学计算和工程计算而设计的,并没有提供完全精确的数值。如果你的程序需要表示一个确定的数值,比如用来表示货币,那么不建议使用float或者double类型,而是建议你使用BigDecimal

但是在使用BigDecimal的过程中,需要注意一些问题。


如下Java代码:

BigDecimal a = new BigDecimal(2.1);
BigDecimal b = new BigDecimal(2);
System.out.println(a.subtract(b));

输出的结果不是万众期待的0.1,而是0.100000000000000088817841970012523233890533447265625


而修改后的Java代码:

BigDecimal a = new BigDecimal("2.1");
BigDecimal b = new BigDecimal("2");
System.out.println(a.subtract(b));

输出的结果才是万众期待的0.1


这个问题可能会导致很严重的结果。创建一个BigDecimal时传入一个double类型参数和传入一个String类型参数,得到的BigDecimal对象有着本质的不同。

如下Java代码:

BigDecimal a = new BigDecimal("2.1");
BigDecimal b = new BigDecimal(1.2);
System.out.println(a);
System.out.println(b);

输出结果为:

2.1

1.1999999999999999555910790149937383830547332763671875


当我们需要用BigDecimal来表示货币时,一定要传入字符串参数,而不是直接传入数值的字面量。切记切记

打赏
打赏

分享到: