1、简介
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效 位的数进行精确的运算。双精度浮点型变量double能够处理16位有效数。在实际应用中,须要对更大或者更小的数进行运算和处理。float和 double只能用来作科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所建立的是对象,咱们 不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造 器是类的特殊方法,专门用来建立对象,特别是带有参数的对象。html
2、构造器描述
BigDecimal(int) 建立一个具备参数所指定整数值的对象。
BigDecimal(double) 建立一个具备参数所指定双精度值的对象。
BigDecimal(long) 建立一个具备参数所指定长整数值的对象。
BigDecimal(String) 建立一个具备参数所指定以字符串表示的数值的对象。java
3、方法描述
add(BigDecimal) BigDecimal对象中的值相加,而后返回这个对象。
subtract(BigDecimal) BigDecimal对象中的值相减,而后返回这个对象。
multiply(BigDecimal) BigDecimal对象中的值相乘,而后返回这个对象。
divide(BigDecimal) BigDecimal对象中的值相除,而后返回这个对象。
toString() 将BigDecimal对象的数值转换成字符串。
doubleValue() 将BigDecimal对象中的值以双精度数返回。
floatValue() 将BigDecimal对象中的值以单精度数返回。
longValue() 将BigDecimal对象中的值以长整数返回。
intValue() 将BigDecimal对象中的值以整数返回。git
4、格式化及例子
因为NumberFormat类的format()方法可使用BigDecimal对象做为其参数,能够利用BigDecimal对超出16位有效数字的货币值,百分值,以及通常数值进行格式化控制。ide
以利用BigDecimal对货币和百分比格式化为例。首先,建立BigDecimal对象,进行BigDecimal的算术运算后,分别创建对货币和百分比格式化的引用,最后利用BigDecimal对象做为format()方法的参数,输出其格式化的货币值和百分比。性能
public static void main(String[] args) { NumberFormat currency = NumberFormat.getCurrencyInstance(); //创建货币格式化引用 NumberFormat percent = NumberFormat.getPercentInstance(); //创建百分比格式化引用 percent.setMaximumFractionDigits(3); //百分比小数点最多3位 BigDecimal loanAmount = new BigDecimal("15000.48"); //贷款金额 BigDecimal interestRate = new BigDecimal("0.008"); //利率 BigDecimal interest = loanAmount.multiply(interestRate); //相乘 System.out.println("贷款金额:\t" + currency.format(loanAmount)); System.out.println("利率:\t" + percent.format(interestRate)); System.out.println("利息:\t" + currency.format(interest)); }
运行结果以下:this
贷款金额: ¥15,000.48 利率: 0.8% 利息: ¥120.00
5、BigDecimal比较
BigDecimal是经过使用compareTo(BigDecimal)来比较的,具体比较状况以下:spa
public static void main(String[] args) { BigDecimal a = new BigDecimal("1"); BigDecimal b = new BigDecimal("2"); BigDecimal c = new BigDecimal("1"); int result1 = a.compareTo(b); int result2 = a.compareTo(c); int result3 = b.compareTo(a); System.out.println(result1); System.out.println(result2); System.out.println(result3); }
打印结果是:-一、0、1,即左边比右边数大,返回1,相等返回0,比右边小返回-1。
注意不能使用equals方法来比较大小。.net
使用BigDecimal的坏处是性能比double和float差,在处理庞大,复杂的运算时尤其明显,因根据实际需求决定使用哪一种类型。rest
Creating a NumberFormatcode
Creating a NumberFormat
for a specific Locale
is done like this:
Locale locale = new Locale("da", "DK");
NumberFormat numberFormat = NumberFormat.getInstance(locale);
和Locale 一块儿用会格式化一些国家的金额。
详细API :http://tutorials.jenkov.com/java-internationalization/numberformat.html
from: http://my.oschina.net/Jerrysun/blog/707642