Class FormatNumber2

All Implemented Interfaces:
Serializable, SourceLocator, Container, Expression, XSLTFunction, InstructionInfoProvider

public class FormatNumber2 extends SystemFunction implements XSLTFunction
XSLT 2.0 implementation of format-number() function - removes the dependence on the JDK.
See Also:
  • Constructor Details

    • FormatNumber2

      public FormatNumber2()
  • Method Details

    • checkArguments

      public void checkArguments(StaticContext env) throws XPathException
      Description copied from class: SystemFunction
      Method called during static type checking
      Overrides:
      checkArguments in class SystemFunction
      Throws:
      XPathException
    • fixup

      public void fixup(DecimalSymbols dfs)
      Fixup: this is a callback from the DecimalFormatManager used once the xsl:decimal-format element is identified
    • preEvaluate

      public Expression preEvaluate(StaticContext env) throws XPathException
      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
      Throws:
      XPathException
    • evaluateAsString

      public 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
    • adjustToDecimal

      public static BigDecimal adjustToDecimal(double value, int precision)
      Convert a double to a BigDecimal. In general there will be several BigDecimal values that are equal to the supplied value, and the one we want to choose is the one with fewest non-zero digits. The algorithm used is rather pragmatic: look for a string of zeroes or nines, try rounding the number down or up as approriate, then convert the adjusted value to a double to see if it's equal to the original: if not, use the original value unchanged.
      Parameters:
      value - the double to be converted
      precision - 2 for a double, 1 for a float
      Returns:
      the result of conversion to a double