通过DecimalFormat.format可以按照指定的格式格式化数据。
public class test {
public static void main(String[] args) {
DecimalFormat d=new DecimalFormat(“#.#%”);//在有小数的情况下留一位小数,默认是四舍五入
BigDecimal decimal=new BigDecimal(“3.1415926”);
double s=2.58863;
double s1=2.58963;
double s2=0;
String format1 = d.format(decimal);
String format2 = d.format(s);
String format3 = d.format(s1);
String format4 = d.format(s2);
System.out.println(format1);
System.out.println(format2);
System.out.println(format3);
System.out.println(format4);
}
}
运行结果:
模板语法
#:这个符号代表一个数字,会把可以去掉的0去掉,比如#.##,按照语法,保留两位小数,如果如果要格式化的数是1.597,正常来说是1.60,但因为后面的0可以去掉,所以格式化之后是1.6
0:这个符号代表一个数字,如果该位置没有数字,则显示0。比如000.00,如果传入的是1.5,那么格式化之后就是001.50
.:这个符号代表小数点。
,:这个符号代表千位分隔符。
;:这个符号用于分隔正数和负数,左边是正数的格式,右边是负数的格式。
%:这个符号代表百分比。在字符串后面用上加上之后,会自动将数据转换成百分比的表达方式。比如#.##%,传入的是0.48567,则格式化的结果是48.57%
‰:这个符号代表千分比。和上面同理
E:这个符号代表科学计数法中的指数符号。
\u00A4:这个符号代表货币符号。
注意
需求:想要数据必须保留一位小数,哪怕小数位是0.
如果使用#.0%,在碰到整数位是0的时候,也就是0.x的时候,前面的0会省略,导致结果是.x%,小数点前面缺少0。
因此需要使用0.0%,这样获得的结果一定会保证个数位是有值的,哪怕是0。这样就会显示0.x%。符合预期。
如果是希望将小数点后面多余的0去掉,就可以用#.#%或0.#%,这样在遇到小数位后面有多余的0的时候会自动去掉。
推荐:
无论是要保留多少位小数,小数点后面多余的0要不要去掉,都可以在个位上放一个0来确保个位上一定会有数据。0.#%,0.0%