1 package com.sharkysoft.printf;
2
3 import java.math.BigDecimal;
4 import com.sharkysoft.math.MathToolbox;
5 import com.sharkysoft.printf.engine.NumberFormatter;
6 import com.sharkysoft.printf.engine.RealFormatter;
7
8 abstract class Formatter_Real extends Formatter_Number
9 {
10
11 protected Formatter_Real(final FormatSpecifier ipPfs)
12 {
13 super(ipPfs, new RealFormatter());
14 final RealFormatter rf = (RealFormatter) mpFormatter;
15 switch (ipPfs.mnPrecision)
16 {
17 case FormatSpecifier.PRECISION_UNSPECIFIED :
18 rf.setMinRightDigits(6);
19 rf.setMaxRightDigits(6);
20 break;
21 case FormatSpecifier.PRECISION_ARGUMENT :
22 break;
23 default :
24 rf.setMinRightDigits(ipPfs.mnPrecision);
25 rf.setMaxRightDigits(ipPfs.mnPrecision);
26 }
27 if (ipPfs.mcPositivePrefix != FormatSpecifier.PREFIX_UNSPECIFIED)
28 {
29 final NumberFormatter nf = (NumberFormatter) mpFormatter;
30 final String vsPrefix = String.valueOf(ipPfs.mcPositivePrefix);
31 nf.setZeroPrefix(vsPrefix);
32 nf.setPosPrefix(vsPrefix);
33 }
34 if (ipPfs.mcAlternate == FormatSpecifier.ALTERNATE_ON)
35 {
36 rf.setShowDecPoint(true);
37 }
38 }
39
40 void adjustWidthAndPrecision(final PrintfState ipPs)
41 {
42 adjustWidth(ipPs);
43 adjustPrecision(ipPs);
44 }
45
46 void adjustPrecision(final PrintfState ipPs)
47 {
48 if (mzVariablePrecision)
49 {
50 final RealFormatter vpRf = (RealFormatter) mpFormatter;
51 final int vnRightDigits = ((Number) ipPs.mapArgs[ipPs.mnArgIndex++]).intValue();
52 vpRf.setMinRightDigits(vnRightDigits);
53 vpRf.setMaxRightDigits(vnRightDigits);
54 }
55 }
56
57 void formatFloat(final PrintfState ipPs)
58 {
59 ipPs.mpOutput.append
60 ( ( (RealFormatter) mpFormatter
61 ).format
62 ( ((Number) ipPs.mapArgs[ipPs.mnArgIndex++]).floatValue()
63 )
64 );
65 }
66
67 void formatDouble(final PrintfState ipPs)
68 {
69 ipPs.mpOutput.append
70 ( ( (RealFormatter) mpFormatter
71 ).format
72 ( ((Number) ipPs.mapArgs[ipPs.mnArgIndex++]).doubleValue()
73 )
74 );
75 }
76
77 void formatBigDecimal(final PrintfState ipPs)
78 {
79 ipPs.mpOutput.append
80 ( ( (RealFormatter) mpFormatter
81 ).format
82 ( (BigDecimal) ipPs.mapArgs[ipPs.mnArgIndex++]
83 )
84 );
85 }
86
87 void formatFloatScientific(final PrintfState ipPs)
88 {
89 ipPs.mpOutput.append
90 ( ( (RealFormatter) mpFormatter
91 ).format
92 ( MathToolbox.toScientificNotation
93 ( ((Number) ipPs.mapArgs[ipPs.mnArgIndex++]).floatValue()
94 )
95 )
96 );
97 }
98
99 void formatDoubleScientific(final PrintfState ipPs)
100 {
101 ipPs.mpOutput.append
102 ( ( (RealFormatter) mpFormatter
103 ).format
104 ( MathToolbox.toScientificNotation
105 ( ((Number) ipPs.mapArgs[ipPs.mnArgIndex++]).doubleValue()
106 )
107 )
108 );
109 }
110
111 void formatBigDecimalScientific(final PrintfState ipPs)
112 {
113 ipPs.mpOutput.append
114 ( ( (RealFormatter) mpFormatter
115 ).format
116 ( MathToolbox.toScientificNotation
117 ( (BigDecimal) ipPs.mapArgs[ipPs.mnArgIndex++]
118 )
119 )
120 );
121 }
122
123 }
124