BigDecimal最基础用法
用字符串生成的BigDecimal是不会丢精度的.
- 简单除法.
public class DemoBigDecimal { public static void main(String[] args) { String value = "1235"; if( !value.isEmpty() ){ BigDecimal bd = new BigDecimal(value); bd = bd.divide(new BigDecimal(1000),3,RoundingMode.HALF_UP);//精确到小数点后3位,且用四舍五入 value = bd.toString(); System.out.println(value); } } }
NumberFormat另一种设精度方法?
if(value instanceof Number) {//浮点数精度进行兼容 java.text.NumberFormat nf = java.text.NumberFormat.getInstance(); nf.setGroupingUsed(false); nf.setMaximumIntegerDigits(30); nf.setMaximumFractionDigits(8); //nf.setMinimumFractionDigits(2); BeanTool.setAttributeByString(bean, entry.getKey(), nf.format(value)); continue; }
DecimalFormat保留小数位数
保留小数:java DecimalFormat format 方法的使用
public class test { public static void main(String[] args) { String ret = getConvertData(01.0003); System.out.println(ret); } public static String getConvertData(Double data){ String ret = ""; java.text.DecimalFormat df = new java.text.DecimalFormat("0.00"); ret = df.format(data); return ret; } }
BigDecimal比较大小
【重点】在进行比较后时一定要让原始构造函数的参数保持一致, 不然极有可能得不到预期结果,见下例
import java.math.BigDecimal; public class TempTest { public static void main(String[] args) throws Exception { BigDecimal bd1 = new BigDecimal("1.23"); BigDecimal bd2 = new BigDecimal("1.230"); BigDecimal bd3 = new BigDecimal(1.23); BigDecimal bd4 = new BigDecimal(1.230); //compareTo()返回的结果是int类型,-1表示小于,0是等于,1是大于。 System.out.println(bd1.compareTo(bd2));//"1.23"和"1.230"相等,打印0 System.out.println(bd3.compareTo(bd4));//1.23和1.230相等,打印0 //【重点】在进行比较后时一定要让原始构造函数的参数保持一致, 不然极有可能得不到预期结果,见下例 System.out.println(bd1.compareTo(bd3));//根据结果"1.23"和1.23,前者更大,一定要避开这种类型不匹配的比较. BigDecimal bd5 = new BigDecimal(2); System.out.println(bd4.compareTo(bd5));//1.230比2小,打印-1 System.out.println(bd5.compareTo(bd4));//2比1.230大,打印1 } }
参考
BigDecimal加减乘除计算以及比较大小==>https://www.cnblogs.com/whatlonelytear/p/5138989.html