FormatNumber
Date: 2016-07-03

com.icl.saxon.functions

## Class FormatNumber

- java.lang.Object
- - com.icl.saxon.expr.Expression
  - - com.icl.saxon.expr.Function
    - - com.icl.saxon.functions.FormatNumber

-     public class FormatNumber
      extends Function

- - ### Field Summary

    - ### Fields inherited from class com.icl.saxon.expr.Function

      `argument`

    - ### Fields inherited from class com.icl.saxon.expr.Expression

      `staticContext`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `FormatNumber()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `Value` | `evaluate(Context c)` Evaluate in a general context
    `java.lang.String` | `evaluateAsString(Context context)` Evaluate in a context where a string is wanted
    `java.lang.String` | `formatNumber(double n, java.lang.String format, java.text.DecimalFormatSymbols dfs)` Here is the method that does the work.
    `int` | `getDataType()` Determine the data type of the exprEssion
    `int` | `getDependencies()` Determine the dependencies
    `java.lang.String` | `getName()` Get the name of the function.
    `Expression` | `reduce(int dep, Context c)` Reduce the dependencies
    `Expression` | `simplify()` Simplify and validate

    - ### Methods inherited from class com.icl.saxon.expr.Function

      `addArgument, checkArgumentCount, display, getNumberOfArguments`

    - ### Methods inherited from class com.icl.saxon.expr.Expression

      `containsReferences, enumerate, evaluateAsBoolean, evaluateAsNodeSet, evaluateAsNumber, getStaticContext, indent, isContextDocumentNodeSet, make, outputStringValue, setStaticContext, usesCurrent`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### FormatNumber

          public FormatNumber()

  - ### Method Detail

    - #### getName

          public java.lang.String getName()

      Description copied from class: `Function`
      Get the name of the function. This method must be implemented in all subclasses.
      Specified by:
        `getName` in class `Function`
      Returns:
        the name of the function, as used in XSL expressions, but excluding its namespace prefix

    - #### getDataType

          public int getDataType()

      Determine the data type of the exprEssion
      Specified by:
        `getDataType` in class `Expression`
      Returns:
        Value.STRING

    - #### simplify

          public Expression simplify()
                              throws XPathException

      Simplify and validate
      Overrides:
        `simplify` in class `Expression`
      Returns:
        the simplified expression
      Throws:
        `XPathException`

    - #### evaluateAsString

          public java.lang.String evaluateAsString(Context context)
                                            throws XPathException

      Evaluate in a context where a string is wanted
      Overrides:
        `evaluateAsString` in class `Expression`
      Parameters:
        `context` - The context in which the expression is to be evaluated
      Returns:
        the value of the expression, evaluated in the current context
      Throws:
        `XPathException`

    - #### evaluate

          public Value evaluate(Context c)
                         throws XPathException

      Evaluate in a general context
      Specified by:
        `evaluate` in class `Expression`
      Parameters:
        `c` - The context in which the expression is to be evaluated
      Returns:
        the value of the expression, evaluated in the current context
      Throws:
        `XPathException`

    - #### formatNumber

          public java.lang.String formatNumber(double n,
                                      java.lang.String format,
                                      java.text.DecimalFormatSymbols dfs)
                                        throws XPathException

      Here is the method that does the work. It needs to be synchronized because it remembers information from one invocation to the next; it doesn't matter if these are in different threads but it can't be interrupted. The reason for remembering information is that getting a new DecimalFormatSymbols each time is incredibly expensive, especially with the Microsoft Java VM. Actually the synchronization is unnecessary if there is a bound Controller.
      Throws:
        `XPathException`

    - #### getDependencies

          public int getDependencies()

      Determine the dependencies
      Specified by:
        `getDependencies` in class `Expression`

    - #### reduce

          public Expression reduce(int dep,
                          Context c)
                            throws XPathException

      Reduce the dependencies
      Specified by:
        `reduce` in class `Expression`
      Parameters:
        `dep` - The dependencies to be removed, e.g. Context.VARIABLES
        `c` - The context to be used for the partial evaluation
      Returns:
        a new expression (or Value) that does not have any of the specified dependencies
      Throws:
        `XPathException`