View Javadoc

1   package com.sharkysoft.printf;
2   
3   import com.sharkysoft.math.MantissaExponent;
4   import com.sharkysoft.math.MathToolbox;
5   import com.sharkysoft.printf.engine.RealFormatter;
6   
7   class Formatter_g extends Formatter_e
8   {
9   
10    Formatter_g(final FormatSpecifier ipPfs)
11    {
12      super(ipPfs);
13      final RealFormatter vpRf = (RealFormatter) mpFormatter;
14      if (ipPfs.mnPrecision == FormatSpecifier.PRECISION_UNSPECIFIED)
15        vpRf.setSigDigits(6);
16      else
17        vpRf.setSigDigits(ipPfs.mnPrecision);
18      vpRf.setMinRightDigits(0);
19      vpRf.setMaxRightDigits(0);
20    }
21    
22    protected final boolean shouldUseScientific(final MantissaExponent ipSnbd)
23    {
24      final int vnPrecision = ((RealFormatter) mpFormatter).getMaxRightDigits();
25      final int vnExponent = ipSnbd.getExponent();
26      return vnExponent > vnPrecision || vnExponent < -4;
27    }
28    
29    protected void adjustPrecision(final PrintfState ipPs)
30    {
31      if (mzVariablePrecision)
32      {
33        final RealFormatter vpRf = (RealFormatter) mpFormatter;
34        vpRf.setSigDigits(((Number) ipPs.mapArgs[ipPs.mnArgIndex++]).intValue());
35      }
36    }
37    
38    protected void adjustWidthAndPrecision(final PrintfState ipPs)
39    {
40      adjustWidth(ipPs);
41      if (mzVariablePrecision)
42        ( (RealFormatter) mpFormatter
43        ).setMaxRightDigits
44        ( ((Number) ipPs.mapArgs[ipPs.mnArgIndex++]).intValue()
45        );
46    }
47    
48    void format(final PrintfState ipPs)
49    {
50      adjustWidthAndPrecision(ipPs);
51      if 
52      ( shouldUseScientific
53        ( MathToolbox.toScientificNotation
54          ( ((Number) ipPs.mapArgs[ipPs.mnArgIndex]).floatValue()
55          )
56        )
57      )
58        formatFloatScientific(ipPs);
59      else
60        formatFloat(ipPs);
61    }
62    
63  }
64