BigInteger与BigDecimal
关于BigInteger
- 使用BigInteger可以表示非常大的整数;
- BigInteger的构造方法重载了几次,推荐使用String作为参数的那个;
- 当需要进行算术运算时,必须使用Biglnteger提供的API;
- Biglnteger的API几乎包括了你所能想到的所有数值操作;
- 你可以将Biglnteger转换成任何基本数据类型,但可能丢失精度
- 在转换之前,应先明确是否可能丢失精度
- 你不一定需要将结果转换为数值型,使用字符串也可以用于显示或存储
import java.math.BigInteger; public class BigIntegerDemo { public static void main(String[] args) { String value1 = "777777777777777777777777777777"; String value2 = "111111111111111111111111111111"; BigInteger number1 = new BigInteger(value1); BigInteger number2 = new BigInteger(value2); BigInteger result; result = number1.add(number2); system.out.println(result); //加法 result = number1.add(number2); System.out.println(result); //减法 result = number1.subtract(number2); System.out.println(result); //乘法 result = number1.multiply(number2); System.out.println(result); //除法 result = number1.divide(number2); //除并求余 BigInteger[] result2 = number1.divideAndRemainder(number2); System.out.println(result2[0]); System.out.println(result2[1]); } }
关于BigDecimal
- 使用BigDecimal主要解决基本数据类型运算精度不足的问题;
- 当原数使用String表示时,使用构造方法创建BigDecimal对象;
- 当原数使用double表示时,使用valueOf()静态方法创建BigDecimal对象;
- 当需要进行算术运算时,必须使用BigDecimal提供的APl;
- BigDecimal的API几乎包括了你所能想到的所有数值操作;·
- 可以将BigInteger转换成任何基本数据类型,但可能丢失精度
- 在转换之前,应先明确是否可能丢失精度
- 你不一定需要将结果转换为数值型,使用字符串也可以用于显示或存储
public class BigDecimalDemo { public static void main(String[] args) { //创建2个基本类型的浮点数 double d1 = 0.1; double d2 = 0.2; //计算2个double的和 System.out.println("2个double求和:"); System.out.println(d1 +d2); System.out.println(); //创建BigDecimal对象 String s1 = "0.1"; String s2 = "0.2"; //BigDecimal number1 = new BigDecimal(s1) ; //BigDecimal number2 = new BigDecimal(s2); BigDecimal number1 = BigDecimal.valueOf(d1) ; BigDecimal number2 = BigDecimal.valueOf(d2); //通过BigDecimal求和 System.out.println("2个BigDecimal求和"); system.out.println(number1.add(number2)); } }
关于NumberFormat
- 使用NumberFormat可以将数值格式化为特定的格式,包括:
- 数字
- 整型数
- 货币样式(可设置地区)
- 百分比
- 只要数据的本质是数值,都可以格式化;
- 先通过NumberFormat的静态方法获取对象,再调用format()方法即可得到格式化后的字符串。
- 根据期望的目标格式,调用不同的方法;
- 得到的结果是StringBuffer对象。
import java.text.NumberFormat;
public class NumberFormatDemo {
public static void main(String[ ] args) {
//将被格式化的数
double value = 93.27;
BigDecimal number = BigDecimal.valueof(value);
//获取NumberFormat工具的对象
NumberFormat percentInstance = NumberFormat.getPercentInstance();
NumberFormat currencyInstance = NumberFormat.getcurrencyInstance(Locale.FRANCE);
//执行格式化
String percentResult = percentInstance.format(number);
String currencyResult = currencyInstance.format(number);
//输出结果
system.out.println(percentResult);
system.out.println(currencyResult);
}
}