Class RMNumberFormat

All Implemented Interfaces:
Archivable, RMFormat, Serializable, Cloneable

public class RMNumberFormat extends DecimalFormat implements RMFormat
This subclass extends DecimalFormat to implement ReportMill's RMFormat interface and to support the extended features "Negative in Red" and "Null String". It also has a toPattern like method, getFormatString, for the purposes of archival.

Also, our modified pattern format can be ambiguous if either decimal or grouping separator not included. In this case we assume any separator preceded by a '0' is the decimal separator. This seems reasonable since a decimal separator preceded by # could result in an empty string or a fractional number with no leading zero (like ".123" instead of "0.123") which seems somewhat rare. And also a grouping separator preceded by 0 seems somewhat rare because it could result in a long zero string like "0,000".

I suppose we should instead have a syntax explicitly declaring decimal and group separators: "$ #,##0.00;ds=,;gs=.".

Removed arbitrary decimal and grouping separators in 7.8.1

See Also:
  • Field Details

  • Constructor Details

    • RMNumberFormat

      public RMNumberFormat()
      Creates an uninitialized number format.
    • RMNumberFormat

      public RMNumberFormat(String aFormatString)
      Creates a number format for the given format string.
    • RMNumberFormat

      public RMNumberFormat(RMNumberFormat aFormat)
      Creates a number format identical to the given format.
  • Method Details

    • createDecimalFormatSymbols

      @Nullable protected DecimalFormatSymbols createDecimalFormatSymbols()
      Creates new decimal format symbols.
    • getNullString

      public String getNullString()
      Returns the String that is substituted when this format is asked to provide stringForObjectValue(null).
    • setNullString

      public void setNullString(String aString)
      Sets the String that is substituted when this format is asked to provide stringForObjectValue(null).
    • isNegativeInRed

      public boolean isNegativeInRed()
      Returns whether this format shows negative values in red.
    • setNegativeInRed

      public void setNegativeInRed(boolean aFlag)
      Sets whether this format shows negative values in red.
    • getLocalCurrencySymbol

      public String getLocalCurrencySymbol()
      Returns the Currency symbol used for this locale.
    • isLocalCurrencySymbolUsed

      public boolean isLocalCurrencySymbolUsed()
      Returns whether local currency symbol is used.
    • setLocalCurrencySymbolUsed

      public void setLocalCurrencySymbolUsed(boolean aFlag)
      Sets whether local currency symbol is used.
    • isCurrencySymbolUsed

      public boolean isCurrencySymbolUsed()
      Returns whether currency symbol is used (dollars, local or international).
    • isPercentSymbolUsed

      public boolean isPercentSymbolUsed()
      Returns whether percent symbol is used.
    • setPercentSymbolUsed

      public void setPercentSymbolUsed(boolean aFlag)
      Returns whether percent symbol is used.
    • getThousandsSeparator

      public String getThousandsSeparator()
      Returns the thousands separator.
    • setThousandsSeparator

      public void setThousandsSeparator(String aValue)
      Sets the thousands separator.
    • getDecimalSeparator

      public String getDecimalSeparator()
      Returns the decimal separator.
    • setDecimalSeparator

      public void setDecimalSeparator(String aValue)
      Sets the decimal separator.
    • getFormatString

      public String getFormatString()
      Returns the format string for this format. This is basically the default toPattern() of DecimalFormat, except that it allows for a arbitrary decimal and grouping separators.

      Ability to set arbitrary decimal and grouping separators removed in 7.8.1, but left this intact in case someone set them in 7.8.0. And then removed altogether in 7.8.2, because it plays havoc in non-English locales. If users need a whacky formatting, they need to do it themselves in scripting.

      Specified by:
      getFormatString in interface RMFormat
    • setFormatString

      public void setFormatString(@Nonnull String aFormat)
      Sets the format string for this format. This is basically the default applyPattern() of DecimalFormat.

      Removed ability to set arbitrary decimal and grouping separators in 7.8.1, in favor of compatibility with rest of ignition.

      Specified by:
      setFormatString in interface RMFormat
    • setFormatStringSafe

      protected void setFormatStringSafe(@Nonnull String aFormat)
      Used when deserializing, because we don't want an exception messing with opening the report. We'll prevent users from setting a bad string themselves with setFormatString
    • formatRM

      @Nullable public Object formatRM(Object anObj)
      Returns a formatted version of the given object.
      Specified by:
      formatRM in interface RMFormat
    • getDefaultLocale

      public static Locale getDefaultLocale()
      Returns the default locale.
    • setDefaultLocale

      public static void setDefaultLocale(Locale aLocale)
      Sets the default locale.
    • equals

      public boolean equals(Object anObj)
      Standard equals implementation.
      Overrides:
      equals in class DecimalFormat
    • toXML

      public RXElement toXML(RXArchiver anArchiver)
      XML archival.
      Specified by:
      toXML in interface Archivable
    • fromXML

      public Object fromXML(RXArchiver anArchiver, RXElement anElement)
      XML unarchival.
      Specified by:
      fromXML in interface Archivable