- BigDecimal可以防止精度丢失,所谓精度丢失就比如说两个小数点后两位的数相加后变成了小数点后好多位,这就发生了精度丢失。
- double类型的变量不要直接用BigDecimal来构建,那样子出来的BigDecimal的值不等于原来的double。
- 一下是简单的实例
//BigDecimal可以把所有基本类型变量都转换成一个BigDecimal对象,也包括用字符串,字符数组来创建BigDeciaml对象 package com.test; import java.math.BigDecimal; public class Main { public static void main(String[] args) { // write your code here // 当需要由double类型变量来构造Bigcimal的时候,不要用new BigDecimal()来构造,因为new BigDecimal()构造出来的并不完全等于原来那个double BigDecimal bigDecimal = BigDecimal.valueOf(0.222); // bigDecimal的真实值是 0.222 BigDecimal bigDecimal2 = new BigDecimal(0.222); // bigDecimal2的真实值是 0.2220000000000000028865798640254070051014423370361328125 } }
//BigDecimal的作用是为了防止精度丢失,就是本来两个小数点后两位的数相加变成了一个小数点后好好多位的数成为精度丢失 package Arith; import java.math.BigDecimal; public class Arith { private static final int DEF_DIV_SCALE = 10; private Arith(){ } public static double add(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.add(b2).doubleValue(); } public static double sub(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.subtract(b2).doubleValue(); } public static double mul(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.multiply(b2).doubleValue(); } public static double div(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue(); } public static void main(String args[]){ System.out.print( Arith.add(0.003, 0.02)); // 输出 0.023 Arith.sub(0.003, 0.02); Arith.mul(0.03, 0.02); Arith.div(0.03, 0.02); } }
BigDecimal
最新推荐文章于 2023-05-07 22:21:35 发布