#:表示该位没有数字时填空显示,有则直接显示;出现在小数位部分时,n个#只保留n位有效小数(比如1.00不保留,1.11则保留)

0: 表示该位没有数字时补零显示,有则直接显示;出现在小数位部分时,n个0表示保留n位小数

另外,还有一个神奇的特例现象,不过总体表现就是上述的几个特点:

  • #.00:小数点左边的#表示在没有数字时或只有个位且个位为零的时候填位为空
  • #.##:小数点左边的#表示在没有数字时填位为空
    public static void main(String[] args) {
        //0.00:第一个零表示个位在没有数字时补零,有则直接显示;小数位的0表示该位没有数字时补零显示,且.00表示保留两位小数;其它位均正常显示;
        DecimalFormat df2 = new DecimalFormat("0.00");
//        System.out.println(df2.format(.1));//0.10
//        System.out.println(df2.format(0.1));//0.10
//        System.out.println(df2.format(0.10));//0.10
//        System.out.println(df2.format(0.100));//0.10
//        System.out.println(df2.format(1.1));//1.10
//        System.out.println(df2.format(1.10));//1.10
//        System.out.println(df2.format(11.1));//11.10
//        System.out.println(df2.format(1.));//1.00
//        System.out.println(df2.format(11));//11.00

        DecimalFormat df1 = new DecimalFormat("0.##");//0.##:0表示该位没有数字时补零显示,有则直接显示
//        System.out.println(df1.format(.1));//0.1
//        System.out.println(df1.format(0.1));//0.1
//        System.out.println(df1.format(0.10));//0.1
//        System.out.println(df1.format(0.100));//0.1
//        System.out.println(df1.format(1.1));//1.1
//        System.out.println(df1.format(1.10));//1.1
//        System.out.println(df1.format(11.1));//11.1
//        System.out.println(df1.format(1.));//1
        // #.00:小数点左边的#表示在没有数字时或只有个位且个位为零的时候填位为空,其它情况均正常显示;
        // 小数位的0表示该位没有数字则补零显示,有则直接显示;.00表示保留两位小数;
        DecimalFormat df3 = new DecimalFormat("#.00");
//        System.out.println(df3.format(.1));//.10
//        System.out.println(df3.format(0.1));//.10
//        System.out.println(df3.format(0.10));//.10
//        System.out.println(df3.format(0.100));//.10
//        System.out.println(df3.format(1.1));//1.10
//        System.out.println(df3.format(1.10));//1.10
//        System.out.println(df3.format(10.1));//10.10
//        System.out.println(df3.format(100.1));//100.10
//        System.out.println(df3.format(1.));//1.00

        DecimalFormat df4 = new DecimalFormat("00.##");//00.##:0表示该位没有数字时补零显示,有则正常显示
//        System.out.println(df4.format(0.));//00
//        System.out.println(df4.format(0.00));//00
//        System.out.println(df4.format(1.));//01
        // 00.##:0表示该位没有数字时补零显示,有则正常显示;#表示该位没有数字时补空显示,有则直接显示;
        // .##只保留有意义小数位数,也就是说,1.00不保留两位小数,而1.01则保留两位小数;
        DecimalFormat df5 = new DecimalFormat("#.##");
        System.out.println(df5.format(0.));//0
        System.out.println(df5.format(00.));//0
        System.out.println(df5.format(0.1));//0.1
        System.out.println(df5.format(1.00));//1
        System.out.println(df5.format(1.));//1
        System.out.println(df5.format(1.1));//1.1
        System.out.println(df5.format(1.01));//1.01
        System.out.println(df5.format(10.01));//10.01
    }

一般,可以使用0.00或0.##或#0.00等类似的模式满足需求,我这里仅保留两位小数,既可以有保留功能也可以避免位上空现象。

ps:关于这个神奇的现象,目前还不知道原因,若有大佬知晓,留言评论!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐