BigDecimal类实现任意精度的浮点运算,其有很多种构造方法,但常用的应该如下所示(个人推测): BigDecimal(BigInteger val) BigDecimal(double val) BigDecimal(int val) BigDecimal(long val) BigDecimal(String val) 以上构造方法分别通过传入大整数,双精度浮点数,整数,长整数,字符串(不能传入Float型)作为参数而构造BigDecimal 对象。参考API,上面构造方法还有对应的传入MathContext对象作为参数如BigDecimal(BigInteger val, MathContext mc) ,MathContext类用于设定精度和舍入规则。 add(BigDecimal augend) subtract(BigDecimal subtrahend) multiply(BigDecimal multiplicand) divide(BigDecimal divisor) pow(int n) 以上方法返回大小数之和,差,积,商与幂。还可以制定舍入方式即roundingMode,通常使用的有ROUND_HALF_UP(四舍五入),ROUND_HALF_DOWN(向下取整),ROUND_DOWN,ROUND_UP。 在网上搜到很多使用BigDecimal类求圆周率的例子,其实在POJ上1001题即为求高精度运算。其程序代码如下: import java.util.Scanner; public class Pku1001 { public static void main(String[] args) { ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー まで:
在我现在进行的项目中用到这种类型,用它来表示金额。可这种类型非常精确,当你在数据库里插入一条数据是6.00时,在显示时却是6.000000000000000000000。在页面显示非常不美观。在网上找了找,还真的找到了解决办法拿来和大家分享一下,在以后做系统时可以用到。它不仅可以做到double和float,而且在商业计算上也能显示它的作用。
java.math.BigDecimal。BigDecimal一共有4个够造方法,让我先来看看其中的两种用法:
使用BigDecimal要用String来够造,要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal,在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果(BigDecimal)再转换为浮点数。 public static double add(double v1,double v2) Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1497357 |
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
我的为题:一个 double i =1 ,double j = 5 ,double result = i/j ,result = 0.2
我想得到 精度为4 既 result = 0.2000怎么做?
如下:
import java.math.BigDecimal;
import java.text.DecimalFormat;
public class bigDecimal {
public static void main(String[] args) {
System.out.println("test0 = "+new BigDecimal(1).divide(new BigDecimal(5), 4, BigDecimal.ROUND_HALF_UP));
String rateString = (new DecimalFormat("##0.0000").format(0.2)).toString();
System.out.println("test1 = "+rateString);
System.out.println("test2 = "+new BigDecimal(0.2).setScale(4,BigDecimal.ROUND_HALF_UP));
System.out.println("test3 = "+new BigDecimal(2.0).setScale(4));
System.out.println("test4 = "+new BigDecimal(2).setScale(4));
System.out.println("test5 = "+new BigDecimal(0.2).setScale(4));
}
}
结果为:
test0 = 0.2000
test1 = 0.2000
test2 = 0.2000
test3 = 2.0000
test4 = 2.0000
Exception in thread "main" java.lang.ArithmeticException: Rounding necessary
at java.math.BigDecimal.divide(BigDecimal.java:1346)
at java.math.BigDecimal.setScale(BigDecimal.java:2308)
at java.math.BigDecimal.setScale(BigDecimal.java:2348)
at bigDecimal.main(bigDecimal.java:13)