# Math.Number

Jump to: navigation, search

It is the tag for the expression representing an integer or decimal real number.

# Definition

According with the Fōrmulæ Arithmetic canon, number expressions must have the following properties:

• They represent only either positive real numbers or zero. A negative number should be represented by a Math.Arithmetic.Negative expression containing a Math.Number expression as its only child.
• There are two types: Integer and decimal numbers. Integer numbers can represent only integer values, while decimal numbers can represent both integer and fractional values.

This expression must have no children.

This expression has internal state, which is an internal value of the number it contains. The format of this number —floating point, arbitrary precision, etc.— depends of the particular implementation.

## Visualization

There could be different visualizations, according with specific features, such like showing big numbers in scientific notation, showing numbers in different numeral systems, or for localization purposes.

Independently of the visualization method, there should be a way to differentiate the visualization of an integer number from a decimal number with no fractional part.

## Edition

When editing the number to be created or modified, there should be a way to differentiate when introducing an integer number from a decimal number with no fractional part.

## Reduction

Since this expression is not expected to be reduced to a different one, no reducers are currently known.

# Known implementations

## The Standard Arithmetic Package

This package provides an implementation of the Math.Number expression, which supports the following features:

• Arbitrary precision, this is, it can hold integer numbers with any number of digits, and decimal numbers with any number of digits on its integer and decimal part. There is a limit, but it is imposed by memory availability, not by design.
• Localization. Numbers are introduced and shown accordingly to the user locale.

### Visualization

There is one visualization on this package, which shows numbers accordingly to the following:

• Numbers are always shown in base 10.
• Numbers are always shown using Hindu-Arabic numerals, This is, the symbols 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9 from the Latin alphabet. The symbol used as a decimal separator is locale dependent. This usage is increasing —to represent numbers— even in languages that traditionally use other alphabets, such as Kanji, Greek, Hebrew or Cyrillic.
• Numbers are always shown left to right. It is a common practice even in right-to-left written languages, such as Arabic or Hebrew, when using Hindu-Arabic numerals to represent numbers.
• Numbers are shown with no leading zeroes before the integer part, unless its integer part is zero.
• Decimal numbers are shown with no trailing zeroes after the fractional part, unless they hold integer values, in such a case there is only one trailing zero, for example in 5.0
• Number are not shorten in any way —i.e. scientific notation—, so be careful because either big numbers or numbers with many decimal places will could produce visually very wide results.
• In order to differentiate integer numbers from decimal numbers with no fractional part, the latter is always shown with a trailing decimal separator and a zero.
• The integer part of the number (if any) is shown separated by a group separator, usually every three places. This symbol is locale dependent.

The following shows examples of this visualization on different numbers, in several locales:

Number type Example in United States Example in France Example in Italy
Integer number 1,234 1 234 1.234
Decimal number with fractional part 1,234.567 1 234,567 1.234,567
Decimal number with no fractional part 1,234.0 1 234,0 1.234,0
Decimal number with no integer part 0.567 0,567 0,567
Integer zero 0 0 0
Decimal zero 0.0 0,0 0,0

### Edition

When a number is created or modified the user should write the number with a trailing decimal point when introducing a decimal number with no fractional part, in order to differentiate it from an integer.

When a number expression is created, it substitutes the previous selected expression. After the creation, the number expression becames the selected expression.

#### Edition "Creation of a number"

Since this expression has internal state, it opens a dialog box in order that the user can write the number. The new Math.Number expression substitutes the current selected expression and becames the new selected expression.

#### Action "Edition of a number"

Since this expression has internal state, it opens a dialog box in order that the user can write the new number. The internal number of the Math.Number currently selected is changed to the new value.

# Programming

## Internal state

Being an expression with internal state, implementations of this expression must provide the necessary to access this state, and to provide a string representation of this state to be serialized.

### Access

Programming language Attribute name Object retrieved Notes
Java "Value" A BigInteger object reference containing the number, if it is integer
A BigDecimal object reference containing the number, if it is decimal
BigInteger or BigDecimal object must be retrieved even if a particular implementation does not support arbitrary precision

### Serialization

Attribute name Serialized form
"Value" The string containing a representation of the number, with the following considerations:
• The number is expressed in base-10.
• The number is expressed using the Latin numeral symbols.
• The decimal separator is always the dot.
• Group separator is never present.
• The number contains a trailing decimal point if it is a decimal with no fractional part.

Examples:

There is no predefined format for expression serialization. The following are examples of Math.Number expression in XML format:

Number XML format
123,456,789 `<expression Tag="Math.Number" Value="123456789" />`
3.14 `<expression Tag="Math.Number" Value="3.14" />`
Integer 38 `<expression Tag="Math.Number" Value="38" />`
Decimal 38 `<expression Tag="Math.Number" Value="38." />`