Float类型*100的坑 (BigDecimal 的使用)和float形的格式化

近日,做项目的时候处理一个Float类型的数据,因为要显示成 % 的形式,直接*100 的话出现了精度丢失问题。就像这样:


Float类型*100的坑 (BigDecimal 的使用)和float形的格式化_第1张图片

这个时候我们就是需要使用BigDecimal 类了  

 下面的方法就可以:

BigDecimal re1=new BigDecimal(Float.toString(0.142f));
BigDecimal re2=new BigDecimal(Float.toString(100.00f));
System.out.println(re1.multiply(re2).floatValue());


下面具体介绍下这个类:

BigDecimal一共有4个构造方法

BigDecimal(int) 创建一个具有参数所指定整数值的对象。
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。
BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。

BigDecimal 的运算方式 不支持 + - * / 这类的运算 它有自己的运算方法

BigDecimal add(BigDecimal augend) 加法运算
BigDecimal subtract(BigDecimal subtrahend) 减法运算
BigDecimal multiply(BigDecimal multiplicand) 乘法运算
BigDecimal divide(BigDecimal divisor) 除法运算

格式化(货币,百分比 的用法)


		BigDecimal bigLoanAmount = new BigDecimal("12.11");   //创建BigDecimal对象
		BigDecimal bigInterestRate = new BigDecimal("23.15");
		BigDecimal bigInterest = bigLoanAmount.multiply(bigInterestRate); //BigDecimal运算
		NumberFormat currency = NumberFormat.getCurrencyInstance();    //建立货币格式化引用
		NumberFormat percent = NumberFormat.getPercentInstance();     //建立百分比格式化用
		percent.setMaximumFractionDigits(3);               //百分比小数点最多3位
		//利用BigDecimal对象作为参数在format()中调用货币和百分比格式化
		System.out.println("Loan amount:\t" + currency.format(bigLoanAmount));
		System.out.println("Interest rate:\t" + percent.format(bigInterestRate));
		System.out.println("Interest:\t" + currency.format(bigInterest));
Float类型*100的坑 (BigDecimal 的使用)和float形的格式化_第2张图片

小数位的取值,其他位的舍入

BigDecimal a= new BigDecimal("1.35");
对数值取值:
1.a.getScale(1,BigDecimal.ROUND_DOWN);
取一位小数,直接删除后面多余位数,故取值1.3.
2.a.getScale(1,BigDecimal.ROUND_UP);
取一位小数,删除后面位数,进一位,故取值1.4.
3.a.getScale(1,BigDecimal.ROUND_HALF_UP);
取一位小数,四舍五入,故取值1.4.
4.a.getScale(1,BigDecimal.ROUND_HALF_DOWN);
取一位小数,四舍五入,但是5也是舍弃,故取值1.3.

BigDecimal 转double类型

使用BigDecimal.doubleValue()的方法

float的格式化

上面说的BigDecimal可以对Float格式化,还可以使用new DecimalFormat("##0.00").format(.01); 这个格式化之后就是 0.01

你可能感兴趣的:(android开发遇到的问题)