Source of OutputFormat.java


  1: 
  2: public class OutputFormat
  3: {
  4:     /**
  5:      Writes out number with digitsAfterPoint digits after
  6:      the decimal point. Rounds any extra digits.
  7:      Does not advance to the next line after output.
  8:     */
  9:     public static void write(double number,
 10:                                  int digitsAfterPoint)
 11:     {
 12:         if (number >= 0)
 13:             writePositive(number, digitsAfterPoint);
 14:         else
 15:         {
 16:             double positiveNumber = -number; 
 17:             System.out.print('-');
 18:             writePositive(positiveNumber, digitsAfterPoint);
 19:         }
 20:     }
 21:     //Precondition: number >= 0
 22:     //Writes out number with digitsAfterPoint digits after the
 23:     //decimal point. Rounds any extra digits.
 24:     private static void writePositive(double number,
 25:                                          int digitsAfterPoint)
 26:     {
 27:         int mover = (int)(Math.pow(10, digitsAfterPoint));
 28:                   //1 followed by digitsAfterPoint zeros
 29:         int allWhole; //number with the decimal point
 30:                       //moved digitsAfterPoint places
 31:         allWhole = (int)(Math.round(number*mover)); 
 32:         int beforePoint = allWhole/mover;
 33:         int afterPoint = allWhole%mover; 
 34:         System.out.print(beforePoint);
 35:         System.out.print('.');
 36:         writeFraction(afterPoint, digitsAfterPoint); 
 37:     }
 38:     //Outputs the integer afterPoint with enough zeros
 39:     //in front to make it digitsAfterPoint digits long.
 40:     private static void writeFraction(int afterPoint,
 41:                                        int digitsAfterPoint)
 42:     {
 43:         int n = 1; 
 44:         while (n < digitsAfterPoint)
 45:         {
 46:             if (afterPoint < Math.pow(10, n))
 47:                 System.out.print('0');
 48:             n = n + 1;
 49:         }
 50:         System.out.print(afterPoint);
 51:     }
 52:     /**
 53:      Writes out number with digitsAfterPoint digits after
 54:      the decimal point. Rounds any extra digits.
 55:      Advances to the next line after output.
 56:     */
 57:     public static void writeln(double number,
 58:                                        int digitsAfterPoint)
 59:     {
 60:        write(number, digitsAfterPoint);
 61:        System.out.println( );
 62:     }
 63: }