;doc:journal: split Decimal marks, Digit group marks
This commit is contained in:
parent
81f9b51967
commit
ed3dc344fc
@ -589,7 +589,7 @@ Some notes about the various output formats:
|
|||||||
|
|
||||||
### CSV output
|
### CSV output
|
||||||
|
|
||||||
- In CSV output, [digit group marks](#decimal-marks-digit-group-marks) (such as thousands separators)
|
- In CSV output, [digit group marks](#digit-group-marks) (such as thousands separators)
|
||||||
are disabled automatically.
|
are disabled automatically.
|
||||||
|
|
||||||
### HTML output
|
### HTML output
|
||||||
@ -1201,15 +1201,39 @@ Scientific E notation is allowed:
|
|||||||
1E-6
|
1E-6
|
||||||
EUR 1E3
|
EUR 1E3
|
||||||
|
|
||||||
### Decimal marks, digit group marks
|
<a name="decimal-marks-digit-group-marks"></a>
|
||||||
|
|
||||||
|
### Decimal marks
|
||||||
|
|
||||||
A *decimal mark* can be written as a period or a comma:
|
A *decimal mark* can be written as a period or a comma:
|
||||||
|
|
||||||
1.23
|
1.23
|
||||||
1,23
|
1,23
|
||||||
|
|
||||||
In the integer part of the quantity (left of the decimal mark), groups
|
Both of these are common in [international number formats][international number formats],
|
||||||
of digits can optionally be separated by a *digit group mark* -
|
so hledger is not biased towards one or the other.
|
||||||
|
Because hledger also supports digit group marks (eg thousands separators),
|
||||||
|
this means that a number like `1,000` or `1.000` containing just one period or comma is ambiguous.
|
||||||
|
In such cases, hledger by default assumes it is a decimal mark, and will parse both of those as 1.
|
||||||
|
|
||||||
|
[international number formats]: https://en.wikipedia.org/wiki/Decimal_separator#Conventions_worldwide
|
||||||
|
|
||||||
|
To help hledger parse such ambiguous numbers more accurately,
|
||||||
|
if you use digit group marks, we recommend declaring the decimal mark explicitly.
|
||||||
|
The best way is to add a [`decimal-mark`](#decimal-mark-directive) directive at the top of each data file, like this:
|
||||||
|
```journal
|
||||||
|
decimal-mark .
|
||||||
|
```
|
||||||
|
Or you can declare it per commodity with [`commodity`](#commodity-directive) directives, described below.
|
||||||
|
|
||||||
|
hledger also accepts numbers like `10.` with no digits after the decimal mark
|
||||||
|
(and will sometimes display numbers that way to disambiguate them - see
|
||||||
|
[Amount formatting, parseability](#amount-formatting-parseability)).
|
||||||
|
|
||||||
|
### Digit group marks
|
||||||
|
|
||||||
|
In the integer part of the amount quantity (left of the decimal mark),
|
||||||
|
groups of digits can optionally be separated by a *digit group mark* -
|
||||||
a comma or period (whichever is not used as decimal mark),
|
a comma or period (whichever is not used as decimal mark),
|
||||||
or a space (any of these Unicode space characters:
|
or a space (any of these Unicode space characters:
|
||||||
space,
|
space,
|
||||||
@ -1221,33 +1245,13 @@ thin space,
|
|||||||
narrow no-break space,
|
narrow no-break space,
|
||||||
medium mathematical space).
|
medium mathematical space).
|
||||||
|
|
||||||
|
So these are all valid amounts in a journal file:
|
||||||
|
|
||||||
$1,000,000.00
|
$1,000,000.00
|
||||||
EUR 2.000.000,00
|
EUR 2.000.000,00
|
||||||
INR 9,99,99,999.00
|
INR 9,99,99,999.00
|
||||||
1 000 000.00 <- ordinary space
|
1 000 000.00 ; <- ordinary space
|
||||||
1 000 000.00 <- no-break space
|
1 000 000.00 ; <- no-break space
|
||||||
|
|
||||||
hledger is not biased towards [period or comma decimal marks][international number formats],
|
|
||||||
so a number containing just one period or comma, like `1,000` or `1.000`, is ambiguous.
|
|
||||||
In such cases hledger assumes it is a decimal mark, parsing both of these as 1.
|
|
||||||
|
|
||||||
[international number formats]: https://en.wikipedia.org/wiki/Decimal_separator#Conventions_worldwide
|
|
||||||
|
|
||||||
To disambiguate these and ensure accurate number parsing, especially
|
|
||||||
if you use digit group marks, we recommend declaring the decimal mark.
|
|
||||||
You can declare it for each file with [`decimal-mark`](#decimal-mark-directive) directives,
|
|
||||||
or for each commodity with [`commodity`](#commodity-directive) directives,
|
|
||||||
described below.
|
|
||||||
A quick example:
|
|
||||||
|
|
||||||
```journal
|
|
||||||
# Assume . is the decimal mark used by all amounts in this file (in all commodities)
|
|
||||||
decimal-mark .
|
|
||||||
```
|
|
||||||
|
|
||||||
Note, hledger accepts numbers with no digits after the decimal mark, like `10.`.
|
|
||||||
(And will sometimes display numbers that way to disambiguate them - see
|
|
||||||
[Amount formatting, parseability](#amount-formatting-parseability).)
|
|
||||||
|
|
||||||
### Commodity
|
### Commodity
|
||||||
|
|
||||||
@ -2209,7 +2213,7 @@ The `commodity` directive performs several functions:
|
|||||||
3. (If no `decimal-mark` directive is in effect:)
|
3. (If no `decimal-mark` directive is in effect:)
|
||||||
It sets the decimal mark to expect (period or comma) when parsing amounts in this commodity,
|
It sets the decimal mark to expect (period or comma) when parsing amounts in this commodity,
|
||||||
in this file and files it includes, from the directive until end of current file.
|
in this file and files it includes, from the directive until end of current file.
|
||||||
See [Decimal marks, digit group marks](hledger.md#decimal-marks-digit-group-marks) above.
|
See [Decimal marks](#decimal-marks) above.
|
||||||
|
|
||||||
4. It declares the precision with which this commodity's amounts should be compared when checking for balanced transactions,
|
4. It declares the precision with which this commodity's amounts should be compared when checking for balanced transactions,
|
||||||
anywhere in this file and files it includes, until end of current file.
|
anywhere in this file and files it includes, until end of current file.
|
||||||
@ -2290,7 +2294,7 @@ or
|
|||||||
decimal-mark ,
|
decimal-mark ,
|
||||||
```
|
```
|
||||||
|
|
||||||
This prevents any [ambiguity](#decimal-marks-digit-group-marks) when
|
This prevents any [ambiguity](#decimal-mark) when
|
||||||
parsing numbers in the file, so we recommend it, especially if the
|
parsing numbers in the file, so we recommend it, especially if the
|
||||||
file contains digit group marks (eg thousands separators).
|
file contains digit group marks (eg thousands separators).
|
||||||
|
|
||||||
@ -4523,7 +4527,7 @@ If you're wondering why your [`print`](#print) report sometimes shows
|
|||||||
trailing decimal marks, with no decimal digits; it does this when
|
trailing decimal marks, with no decimal digits; it does this when
|
||||||
showing amounts that have digit group marks but no decimal digits,
|
showing amounts that have digit group marks but no decimal digits,
|
||||||
to disambiguate them and allow them to be re-parsed reliably
|
to disambiguate them and allow them to be re-parsed reliably
|
||||||
(see also [Decimal marks, digit group marks](#decimal-marks-digit-group-marks).
|
(see also [Decimal marks](#decimal-marks).
|
||||||
Eg:
|
Eg:
|
||||||
|
|
||||||
```journal
|
```journal
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user