public class OutputFormat
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: }