System.out.format的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了System.out.format的使用相关的知识,希望对你有一定的参考价值。


   

import java.util.Calendar;
import java.util.Locale;
public class TestFormat {
    
    public static void main(String[] args) {
      long n = 461012;
      System.out.format("%d%n", n);                  //  -->  "461012"
      System.out.format("%08d%n", n);                //  -->  "00461012"
      System.out.format("%+8d%n", n);                //  -->  " +461012"
      System.out.format("%,8d%n", n);                //  -->  " 461,012"
      System.out.format("%+,8d%n%n", n);             //  -->  "+461,012"
      
      double pi = Math.PI;
      System.out.format("%f%n", pi);                 //  -->  "3.141593"
      System.out.format("%.3f%n", pi);               //  -->  "3.142"
      System.out.format("%10.3f%n", pi);             //  -->  "     3.142"
      System.out.format("%-10.3f%n", pi);            //  -->  "3.142"
      System.out.format(Locale.FRANCE,
                        "%-10.4f%n%n", pi);          //  -->  "3,1416"
      Calendar c = Calendar.getInstance();
      System.out.format("%tB %te, %tY%n", c, c, c);  //  -->  "May 29, 2006"
      System.out.format("%tl:%tM %tp%n", c, c, c);   //  -->  "2:34 am"
      System.out.format("%tD%n", c);                 //  -->  "05/29/06"
    }
}
 
 
====================
import java.text.*;
public class DecimalFormatDemo {
   static public void customFormat(String pattern, double value ) {
      DecimalFormat myFormatter = new DecimalFormat(pattern);
      String output = myFormatter.format(value);
      System.out.println(value + "  " + pattern + "  " + output);
   }
 
   static public void main(String[] args) {
      customFormat("###,###.###", 123456.789);
      customFormat("###.##", 123456.789);
      customFormat("000000.000", 123.78);
      customFormat("$###,###.###", 12345.67); 
   }
}
 


The output is:
 
123456.789  ###,###.###  123,456.789
123456.789  ###.##  123456.79
123.78  000000.000  000123.780
12345.67  $###,###.###  $12,345.67
Converters and Flags Used in TestFormat.java(只是例子中用到的,还有没有用到的)

 

Converter

Flag Explanation
d   A decimal integer.
f   A float.
n   A new line character appropriate to the platform running the application. You should always use %n, rather than \n.
tB   A date & time conversion—locale-specific full name of month.
td, te   A date & time conversion—2-digit day of month. td has leading zeroes as needed, te does not.
ty, tY   A date & time conversion—ty = 2-digit year, tY = 4-digit year.
tl   A date & time conversion—hour in 12-hour clock.
tM   A date & time conversion—minutes in 2 digits, with leading zeroes as necessary.
tp   A date & time conversion—locale-specific am/pm (lower case).
tm   A date & time conversion—months in 2 digits, with leading zeroes as necessary.
tD   A date & time conversion—date as %tm%td%ty
  08 Eight characters in width, with leading zeroes as necessary.
  + Includes sign, whether positive or negative.
  , Includes locale-specific grouping characters.
  - Left-justified..
  .3 Three places after decimal point.
  10.3 Ten characters in width, right justified, with three places after decimal point.

 



JDK5.0允许象C语言那样直接用printf()方法来格式化输出,并且提供了许多参数来格式化输入,调用也很简单:

System.out.format("Pi is approximately  %f", Math.Pi);

   System.out.printf("Pi is approximately  %f", Math.Pi);

 printf()和 format() 方法具有相同的功能. System.out 是 Java.io.PrintStream的实例PrintStreamjava.io.PrintWriter, 和 java.lang.String 每个类都有四个新的格式化方法:

format( String format, Object... args);

printf( String format, Object... args);

format( Locale locale, String format, Object... args);

printf( Locale locale, String format, Object... args);

 

同时,以前的formatter类也提供了更完善的方法来格式化,例如:

formatter.format("Pi is approximately %1$f," +

        "and e is about %2$f", Math.PI, Math.E);

 

格式化元素的构成如下:

%[argument_index$][flags][width][.precision]conversion

其中:

argument_index是一个正整数,说明了参数的位置,1为取第一个参数

width表示输出的最小字母个数

precision代表数字的小数位数

conversion代表被格式化的参数的类型:

f  float,

t  time

d  decimal

o octal

x  hexadecimal

s  general

c  a Unicode character

以下是个例子:

package format;

 

   import java.util.Formatter;

 

   public class UsingFormatter {

 

     public static void main(String[] args) {

       if (args.length != 1) {

         System.err.println("usage: " +

           "Java format/UsingFormatter ");

         System.exit(0);

       }

       String format = args[0];

 

       StringBuilder stringBuilder = new StringBuilder();

       Formatter formatter = new Formatter(stringBuilder);

       formatter.format("Pi is approximately " + format +

         ", and e is about " + format, Math.PI, Math.E);

       System.out.println(stringBuilder);

     }

   }

 

//控制台调用

java format/UsingFormatter %f

//输出

Pi is approximately 3.141593, and e is about 2.718282

//控制台调用

java format/UsingFormatter %.2f

//输出

Pi is approximately 3.14, and e is about 2.72

//控制台调用

java format/UsingFormatter %6.2f

//输出(有空格来填补长度)

Pi is approximately   3.14, and e is about   2.72

//控制台调用

java format/UsingFormatter  %1$.2f

//输出

Pi is approximately 3.14, and e is about 3.14

 

//改变区域设置

package format;

 

   import java.util.Formatter;

   import java.util.Locale;

 

   public class UsingFormatter {

 

     public static void main(String[] args) {

       if (args.length != 1) {

         System.err.println("usage: " +

           "java format/UsingFormatter <format string>");

         System.exit(0);

       }

       String format = args[0];

 

       StringBuilder stringBuilder = new StringBuilder();

       Formatter formatter = new Formatter(stringBuilder,

                                   Locale.FRANCE);

       formatter.format("Pi is approximately " + format +

         ", and e is about " + format, Math.PI, Math.E);

       System.out.println(stringBuilder);

     }

   }

//控制台调用

java format/UsingFormatter %.2f

//输出

Pi is approximately 3,14, and e is about 2,72

 

//采用format,printf的可替代写法

package format;

 

   public class UsingSystemOut {

 

     public static void main(String[] args) {

       if (args.length != 1) {

         System.err.println("usage: " +

           "java format/UsingSystemOut <format string>");

         System.exit(0);

       }

       String format = args[0];

 

       System.out.format("Pi is approximately " + format +

         ", and e is approximately " + format, Math.PI, Math.E);

     }

   }

//控制台调用

java format/UsingSystemOut %.2f%n

//输出

Pi is approximately 3.14

   , and e is about 2.72

 

对时间的格式化用字母t来代表,通常在t后面加上特殊的字符来显示时间的某个部分:

tr  hour and minute,

tA  the day of the week

tB  the name of the month

te  the number of the day of the month

tY  the year

//eg.

package format;

 

   import java.util.Calendar;

 

   public class FormattingDates  {

 

     public static void main(String[] args) {

       System.out.printf("Right now it is %tr on " +

                         "%<tA, %<tB %<te, %<tY.%n",

                         Calendar.getInstance());

     }

   }

//说明:“<”指示采用的参数为前一个被格式化的参数

//输出

Right now it is 01:55:19 PM on Wednesday, September 22, 2004.

以上是关于System.out.format的使用的主要内容,如果未能解决你的问题,请参考以下文章

Android,是不是可以像 System.out.format("%02d", n); 这样格式化 textview?

是否可以以相反的顺序使System.out.print排序变量?

java 格式化

递归原来可以so easy|-连载

环境变量继承行为

java的double的大数值时 怎么才能不显示成