java BigDecimal 添加千位分隔符,保留几位小数
含格式的都是String类的:比如添加千位分隔符的,转换为百分数格式的
1.使用DecimalFormat类,会返回String类型
舍入模式参考 DecimalFormat对数值格式化的舍入问题——RoundingMode
import static org.junit.Assert.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import org.junit.Test;
public class BigDecimalTest {
/**
* 使用DecimalFormat类 返回String类型
*/
@Test
public void BigDecimalFormatTest() {
//0 一个数字 ; # 一个数字,不包括 0
//保留两位小数,如果不足两位小数则自动补零
DecimalFormat df1 = new DecimalFormat("###0.00") ;
df1.setRoundingMode(RoundingMode.HALF_UP);
System.out.println(df1.format(124.3));
System.out.println(df1.format(124.315)); //费解 没有四舍五入
System.out.println(df1.format(124.325)); //费解 实现四舍五入
//保留两位小数,不足两位则不补零
DecimalFormat df2 = new DecimalFormat("###0.##") ;
System.out.println(df2.format(124.6));
System.out.println(df2.format(124));
//保留两位小数,哪里不足位则补零
DecimalFormat df3 = new DecimalFormat("000.00");
System.out.println(df3.format(24));
//添加千位分隔符,保留3位小数,不足的补0
DecimalFormat df4 = new DecimalFormat("#,##0.000");
System.out.println(df4.format(new BigDecimal(3613.61)));
System.out.println(df4.format(new BigDecimal(3613.613)));
System.out.println(df4.format(new BigDecimal(3613.6135)));
System.out.println(df4.format(new BigDecimal(3613.6136)));
}
}
2.使用BigDecimal.setScale()方法,会返回BigDecimal类型,但是也可再转成String类型
import static org.junit.Assert.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import org.junit.Test;
public class BigDecimalTest {
/**
* 使用BigDecimal的setScale()方法
*
*/
@Test
public void setBigDecimalScale(){
BigDecimal bd1 = new BigDecimal( 911.911);
BigDecimal bd2 = new BigDecimal( 911.91156);
bd1 = bd1.setScale(4, BigDecimal.ROUND_HALF_UP);
bd2 = bd2.setScale(4, BigDecimal.ROUND_HALF_UP);
System.out.println("bd1=="+bd1);
System.out.println("bd2=="+bd2);
//返回String 不足位就补0
String str1 = bd1.setScale(4, BigDecimal.ROUND_HALF_UP).toString();
System.out.println("str1==="+str1);
//返回String 不足位也不补0
String str2 = new String(""+bd1.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
System.out.println("str1==="+str2);
}
}
3.BigDecimal和百分比格式互转 参考Java百分比、BigDecimal小数互转
import static org.junit.Assert.*;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import org.junit.Test;
public class BigDecimalTest{
@Test
public void percentTest(){
//BigDecimal 转为百分比格式
DecimalFormat df = new DecimalFormat("0.00%");
BigDecimal d=new BigDecimal(0.666);
String percent=df.format(d);
System.out.println("percent=="+percent);
//百分比格式转为BigDecimal
percent=percent.replace("%","");
Float f = Float.valueOf(percent) / 100;
BigDecimal decimal = new BigDecimal(f);
System.out.println(decimal);//-0.66600000858306884765625
}
}
4.两个BigDecimal比较大小用compareTo()方法,比较结果有-1,0,1,分别表示小于,等于,大于
import static org.junit.Assert.*;
import java.math.BigDecimal;
import org.junit.Test;
public class BigDecimalTest {
@Test
public void testEqual(){
BigDecimal value1 = new BigDecimal(3.14);
BigDecimal value2 = new BigDecimal(3.20);
if(value1.compareTo(value2) == 0){
System.out.println("value1 = value2");
}
if(value1.compareTo(value2) == 1){
System.out.println("value1 > value2");
}
if(value1.compareTo(value2) == -1){
System.out.println("value1 < value2");
}
}
}