浮点数计算BigDecimal 及精度/舍入

涉及小数的计算,最好都统一用BigDecimal来处理,保证运算精度
在构建BigDecimal时,用字符串做参数,其它方式会有精度问题
BigDecimal bd= new BigDecimal("123456789.11112233");

//方法
add()
subtract()
multiply()
divide()

//格式化
NumberFormat nf = NumberFormat.getNumberInstance() ;
nf.setMaximumFractionDigits(2) ;
nf.setMinimumFractionDigits(2);

nf.format(bd);

//大小比较
if(a.compareTo(b) == -1){
//<
}else if(a.compareTo(b) == 0){
//==
}else if(a.compareTo(b) == 1){
//>
}

//小数四舍五入模式
BigDecimal b = new BigDecimal("123.6779");
System.out.println(b.setScale(2, BigDecimal.ROUND_DOWN));//向下舍入 123.67


手机号13777777777,如果是为Double类型接收,就会自动转为科学计数法,可这样处理


一般是Double转String,方法一般有两种:

1.利用String.format()

saleUnilateImport.setPhone(String.format("%.4f", row.getCell(1).getNumericCellValue()));//15145117218.0000保留4位小数

String.format("%.0f", row.getCell(0).getNumericCellValue())//15145117218,取整!

2.利用DecimalFormat类

DecimalFormat df = new DecimalFormat("#");//转换成整型
saleUnilateImport.setPhone(df.format(row.getCell(1).getNumericCellValue()));



3.利用DecimalFormat类

DecimalFormat df = new DecimalFormat("#,##0.00");//保留两位小数且不用科学计数法saleUnilateImport.setPhone(df.format(row.getCell(1).getNumericCellValue()));


格式化类,
DecimalFormat格式化double
SimpleDateFormat格式化Date

DecimalFormat df = new DecimalFormat( "#,##0.00 ");
//保留两位小数且不用科学计数法,并使用千分位
String value = df.format(d);


不用科学计数法
NumberFormat n = NumberFormat.getInstance();
n.setGroupingUsed(false);
n.setMaximumFractionDigits(100);
System.out.println(n.format(0.0000001));//0.0000001
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值