deconstruct-number-format
v0.0.1
Published
deconstruct a number format eg '-£#,##0.##0' and return a set of parameters to describe the format
Downloads
50,791
Readme
deconstruct-number-format
To deconstruct a number format eg '-£#,##0.##0 /m', '(33 years)', '$ -99.00' and return a set of parameters to describe the format.
Accepts:
- negative signs before or after prefix text
- brackets as negative signs
- prefix and suffix texts
.
or,
as decimal point- space or
.
or,
as thousand separators - space or
.
or,
as thousanths separators #
,9
or0
as number place holders
Returns:
- negativeType: 'right', 'left', 'brackets', 'none'
- negativeRightPos: 0 if right negative or bracket is at end of expression, >0 if right/bracket is followed by suffix; -1 no right negative
- negativeLeftPos: 0 if right negative or bracket is at start expression, >0 if right/bracket follows prefix; -1 no left negative
- suffix: text characters after number; can be ''
- prefix: text characters before number (cannot include 0,9,#); can be ''
- negativeLeftSymbol: left hand negative symbol (may include trailing spaces), eg '(', '( ', '- '
- negativeRightSymbol: right hand negative symbol (may include leading spaces), eg ')', ' )', ' -'
- decimalChar: character repesenting decimal (. or ,)
- integerSeparator: separator of thousands (space or . or ,); empty string if no separator
- decimalsSeparator: separator of thousanths (space or . or ,); empty string if no separator
- padLeft: padding front of number, based on first postition of a zero; -1 = no padding
- maxLeft: max places permitted before the dp, based on 9 or 0 as the first number holder; -1 = no max
- padRight: zero padding required to right of dp, based on last postition of a zero; -1 = no padding
- maxRight: max places permitted after the dp, based on 0 or 9 as the last number holder, can be 0 (integer only); -1 = no max
Notes on decimal points/thousands separators:
If a format ends in a . or , then this will be taken as the decimal character UNLESS the same character is used elsewhere so:
#,###.
results in decimalChar = '.', thousands separator = ','#.###,
results in decimalChar = ',', thousands separator = '.'
If a format only has one of ',' or '.' and the character only appears once it is taken as the decimal point
#,###
results in decimalChar = ','#.###
results in decimalChar = '.'
If the character appears twice it is a separator
#,###,###
results in decimalChar = '.', thousands separator = ','#.###.###
results in decimalChar = ',', thousands separator = '.'
When in doubt '.' is taken as the separator, so
#.###,#
results in decimalChar = '.', thousandths separator = ',' To create the same structure with decimalChar as ',', just add a '.' at start or end or extend expression eg.#.###,#
#.###,#.
#.###.###,#
Does not work for:
- structured reference numbers, eg 9999-9999
- ignores and removes leading and trailing spaces (but retains those between pre/post fix and negative symbols etc)