BigDecimal用法
2016-07-07 21:39
239 查看
最近做项目用到了高精度数字,为了跟数据库中 Decimal 类型字段对应,在程序中只能使用 BigDecimal,接下来就简单介绍一下 BigDecimal 的用法。
因为22.90无法精确表示一个 double 类型的数据,使用 double 类型的话会有一定的不可预知性,所以会出现上述情况,建议优先使用 String 类型的参数。
1、运算
1.1、加法
public static void main(String[] args) { BigDecimal bigDecimal1 = new BigDecimal("22.0000"); BigDecimal bigDecimal2 = new BigDecimal("10.0000"); System.out.println(bigDecimal1.add(bigDecimal2)); // 结果为32.0000 }
1.2、减法
public static void main(String[] args) { BigDecimal bigDecimal1 = new BigDecimal("22.0000"); BigDecimal bigDecimal2 = new BigDecimal("10.0000"); System.out.println(bigDecimal1.subtract(bigDecimal2)); // 结果为12.0000 }
1.3、乘法
public static void main(String[] args) { BigDecimal bigDecimal1 = new BigDecimal("22.0000"); BigDecimal bigDecimal2 = new BigDecimal("10.0000"); System.out.println(bigDecimal1.multiply(bigDecimal2)); // 结果为220.00000000 }
1.4、除法
public static void main(String[] args) { BigDecimal bigDecimal1 = new BigDecimal("22.0000"); BigDecimal bigDecimal2 = new BigDecimal("10.0000"); System.out.println(bigDecimal1.divide(bigDecimal2)); // 结果为2.2 }
2、类型转换
2.1、转换为double类型
bigDecimal.doubleValue();
2.2、转换为float类型
bigDecimal.floatValue();
2.3、转换为String类型
bigDecimal.toString();
2.4、转换为BigInteger类型
bigDecimal.toBigInteger(); // 记住,如果包含小数位,结果将小数位直接舍去
3、去除小数点后多余的0
public class BigDecimalTest { public static void main(String[] args) { BigDecimal bigDecimal1 = new BigDecimal("22.90"); BigDecimal bigDecimal2 = new BigDecimal("144.0000"); System.out.println(toResult(bigDecimal1)); // 22.9 System.out.println(toResult(bigDecimal2)); // 144 } public static BigDecimal toResult(BigDecimal bigDecimal) { return bigDecimal.stripTrailingZeros(); // 如果想要避免输出科学计数法的字符串,则使用bigDecimal.stripTrailingZeros().toPlainString(); } }
4、构造器参数优先使用String类型
用过 BigDecimal 的应该会注意到我之前构造器中传递的值都是 String 类型,但是 BigDecimal 还有一个构造器可传递 double 类型的,那为什么不直接使用 这个构造器呢?请看下面:BigDecimal bigDecimal1 = new BigDecimal(22.90); BigDecimal bigDecimal2 = new BigDecimal("22.90"); System.out.println(bigDecimal1); // 22.89999999999999857891452847979962825775146484375 System.out.println(bigDecimal2); // 22.90
因为22.90无法精确表示一个 double 类型的数据,使用 double 类型的话会有一定的不可预知性,所以会出现上述情况,建议优先使用 String 类型的参数。
相关文章推荐
- mysql中如何去除小数点后面多余的0
- JavaScript 获取任一float型小数点后两位的小数
- jQuery实现只允许输入数字和小数点的方法
- 让html的text输入框只能输入数字和1个小数点(0-59之间可改)
- js验证整数加保留小数点的简单实例
- js 只能输入数字和小数点的文本框改进版
- javascript中RegExp保留小数点后几位数的方法分享
- js输出数据精确到小数点后n位代码
- JS保留小数点(四舍五入、四舍六入)实现思路及实例
- js小数计算小数点后显示多位小数的实现方法
- Java BigDecimal类的使用和注意事项
- Java BigDecimal类用法详解
- java中BigDecimal的操作方法
- Java中BigDecimal类的简单用法
- 使用BigDecimal进行精确运算(实现加减乘除运算)
- Java中使用BigDecimal进行浮点数运算
- 实现js保留小数点后N位的代码
- BigDecimal 舍入模式(Rounding mode)介绍
- python基础教程(第2版)第三章读后总结;
- BigDecimal类的用法