## net.sf.saxon.functions
Class FormatNumber

    java.lang.Object
      |
      +--net.sf.saxon.expr.ComputedExpression
            |
            +--net.sf.saxon.expr.FunctionCall
                  |
                  +--net.sf.saxon.functions.SystemFunction
                        |
                        +--net.sf.saxon.functions.FormatNumber

All Implemented Interfaces:
  Container, Expression, InstructionInfoProvider, java.io.Serializable, javax.xml.transform.SourceLocator, XSLTFunction

public class FormatNumber
extends SystemFunction
implements XSLTFunction

This is the original XSLT 1.0 implementation of format-number using the JDK directly. It is still available for the time being under the name format-number-1.0, in case the new version has problems.

See Also:
  Serialized Form

Field Summary

Fields inherited from class net.sf.saxon.functions.SystemFunction
`operation`

Fields inherited from class net.sf.saxon.expr.FunctionCall
`argument`

Fields inherited from class net.sf.saxon.expr.ComputedExpression
`locationId, staticProperties`

Fields inherited from interface net.sf.saxon.expr.Expression
`EVALUATE_METHOD, ITERATE_METHOD, PROCESS_METHOD`

Constructor Summary
`FormatNumber()`

Method Summary
`void` `checkArguments(StaticContext env)` Method called during static type checking
`java.lang.String` `evaluateAsString(XPathContext context)` Evaluate in a context where a string is wanted
`Item` `evaluateItem(XPathContext c)` Evaluate in a general context
`java.lang.String` `formatNumber(double n, java.lang.String format, java.text.DecimalFormatSymbols dfs, XPathContext context)` Here is the method that does the work.
`Expression` `preEvaluate(StaticContext env)` preEvaluate: this method suppresses compile-time evaluation by doing nothing.

Methods inherited from class net.sf.saxon.functions.SystemFunction
`addContextDocumentArgument, computeCardinality, display, getDetails, getItemType, getRequiredType, main, makeSystemFunction, setDetails, useContextItemAsDefault`

Methods inherited from class net.sf.saxon.expr.FunctionCall
`analyze, checkArgumentCount, getDisplayName, getFunctionNameCode, getNumberOfArguments, iterateSubExpressions, promote, setArguments, setFunctionNameCode, simplify, simplifyArguments`

Methods inherited from class net.sf.saxon.expr.ComputedExpression

`adoptChildExpression, computeDependencies, computeSpecialProperties, computeStaticProperties, dynamicError, dynamicError, effectiveBooleanValue, getCardinality, getColumnNumber, getConstructType, getDependencies, getExecutable, getImplementationMethod, getInstructionInfo, getIntrinsicDependencies, getLineNumber, getLocationId, getParentExpression, getPublicId, getSpecialProperties, getSystemId, iterate, markTailFunctionCalls, process, resetStaticProperties, setLocationId, setParentExpression, typeError`

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

### checkArguments

    public void checkArguments(StaticContext env)
                        throws XPathException

  Description copied from class: `SystemFunction`
  Method called during static type checking

  Overrides:
    `checkArguments` in class `SystemFunction`
    `XPathException`

### preEvaluate

    public Expression preEvaluate(StaticContext env)

  preEvaluate: this method suppresses compile-time evaluation by doing nothing. We can't evaluate early because we don't have access to the DecimalFormatManager.

  Overrides:
    `preEvaluate` in class `FunctionCall`

### evaluateAsString

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

  Evaluate in a context where a string is wanted

  Specified by:
    `evaluateAsString` in interface `Expression`
  Overrides:
    `evaluateAsString` in class `ComputedExpression`
  Parameters:
    `context` - The context in which the expression is to be evaluated
  Returns:
    the value of the expression, evaluated in the current context. The expression must return a string or (); if the value of the expression is (), this method returns "".
  Throws:
    `XPathException` - if any dynamic error occurs evaluating the expression

### evaluateItem

    public Item evaluateItem(XPathContext c)
                      throws XPathException

  Evaluate in a general context

  Specified by:
    `evaluateItem` in interface `Expression`
  Overrides:
    `evaluateItem` in class `ComputedExpression`
  Parameters:
    `c` - The context in which the expression is to be evaluated
  Returns:
    the node or atomic value that results from evaluating the expression; or null to indicate that the result is an empty sequence
  Throws:
    `XPathException` - if any dynamic error occurs evaluating the expression

### formatNumber

    public java.lang.String formatNumber(double n,
                                         java.lang.String format,
                                         java.text.DecimalFormatSymbols dfs,
                                         XPathContext context)
                                  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.

    `XPathException`