emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Org table: numeric locale
@ 2021-08-28  7:07 Jarmo Hurri
  2021-08-28 10:19 ` Maxim Nikulin
  0 siblings, 1 reply; 4+ messages in thread
From: Jarmo Hurri @ 2021-08-28  7:07 UTC (permalink / raw)
  To: emacs-orgmode


Greetings.

I wonder if it is possible to get org table formulas to respect numeric
locale.

Emacs documentation says that Emacs uses the value of LC_NUMERIC:

https://www.gnu.org/software/emacs/manual/html_node/emacs/General-Variables.html

However, even though I have a value of LC_NUMERIC which specifies comma
as a decimal separator, I get dot as a decimal separator when formatting
a floating point value in both elisp and in org table formula. So yes, I
am aware that the source of the issue is likely to be in Emacs, but I
only need a solution for org only.

The example at the end of this message tries to illustrate all aspects:
what my environment variables are, what Emacs sees and does, what org
does, and how to force locale in another language (C++).

Have fun and stay safe,

Jarmo

# -------------------------------------------------------------------------
* My relevant locale variables in shell
  #+begin_src sh
    echo "LANG: ${LANG}"
    echo "LC_ALL: ${LC_ALL}"
    echo "LC_NUMERIC: ${LC_NUMERIC}"
  #+end_src

  #+RESULTS:
  | LANG:       | en_GB.UTF-8 |
  | LC_ALL:     |             |
  | LC_NUMERIC: | fi_FI.UTF-8 |

* What emacs sees and does
  Emacs uses dot, not comma, as decimal separator.
  #+begin_src elisp
    (let ((env (mapconcat 'getenv (list "LANG" "LC_ALL" "LC_NUMERIC") " "))
          (str (format "%.2f" (/ 1.0 3))))
      (concat env "\n" str "\n" (emacs-version)))
  #+end_src

  #+RESULTS:
  : en_GB.UTF-8  fi_FI.UTF-8
  : 0.33
  : GNU Emacs 27.2 (build 1, x86_64-redhat-linux-gnu, GTK+ Version 3.24.30, cairo version 1.17.4)
  :  of 2021-08-07

* What Org table does
  Org table also uses dot, not comma, as decimal separator.
  | 0.33 |
  #+TBLFM: @1$1=1.0/3;%.2f

* C++ version (for comparison)
  #+begin_src C++ :results raw
    #include <cstdlib>
    #include <cstdio>
    #include <clocale>
    
    int main (int argc, char* argv[])
    {
        // I have to set locale, it is not obtained automatically from
        // shell environment
        setlocale (LC_NUMERIC, getenv ("LC_NUMERIC"));
    
        printf ("%.2f", 1.0 / 3);
        exit (0);
    }
  #+end_src

  #+RESULTS:
  0,33
# -------------------------------------------------------------------------



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Org table: numeric locale
  2021-08-28  7:07 Org table: numeric locale Jarmo Hurri
@ 2021-08-28 10:19 ` Maxim Nikulin
  2021-09-05 11:08   ` Jarmo Hurri
  0 siblings, 1 reply; 4+ messages in thread
From: Maxim Nikulin @ 2021-08-28 10:19 UTC (permalink / raw)
  To: emacs-orgmode

On 28/08/2021 14:07, Jarmo Hurri wrote:
> 
> I wonder if it is possible to get org table formulas to respect numeric
> locale.

Even to add some functions to Emacs that respect numeric locales, it is 
necessary to use e.g. dynamic modules (warning: do not try to change 
global locale by setlocale(3), almost certainly something in Emacs will 
be broken, a library that allows local locale objects is strongly 
preferred).
https://www.gnu.org/software/emacs/manual/html_node/elisp/Writing-Dynamic-Modules.html

> Emacs documentation says that Emacs uses the value of LC_NUMERIC:
> 
> https://www.gnu.org/software/emacs/manual/html_node/emacs/General-Variables.html

It is a confusing statement, see:
- https://debbugs.gnu.org/cgi/bugreport.cgi?bug=29645
   #29645 Feature Request: Locale aware formatting
   Date: Sun, 10 Dec 2017 15:05:02 UTC
- https://lists.gnu.org/archive/html/emacs-devel/2021-06/msg00327.html
   https://lists.gnu.org/archive/html/emacs-devel/2021-06/msg00139.html

The state of numeric locales in Emacs is a little worse than just 
unsupported. Mostly "C" is forced for LC_NUMERIC, so e.g. grouping is 
not used. However if your locale uses comma "," as decimal separator,
you may be confused by calc results:

     M-x calc RET dg RET 123456
     123,456



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Org table: numeric locale
  2021-08-28 10:19 ` Maxim Nikulin
@ 2021-09-05 11:08   ` Jarmo Hurri
  2021-09-07 14:47     ` Max Nikulin
  0 siblings, 1 reply; 4+ messages in thread
From: Jarmo Hurri @ 2021-09-05 11:08 UTC (permalink / raw)
  To: emacs-orgmode

Maxim Nikulin <manikulin@gmail.com> writes:

> On 28/08/2021 14:07, Jarmo Hurri wrote:
>> I wonder if it is possible to get org table formulas to respect
>> numeric locale.
>
> Even to add some functions to Emacs that respect numeric locales, it
> is necessary to use e.g. dynamic modules

>> Emacs documentation says that Emacs uses the value of LC_NUMERIC:
>> https://www.gnu.org/software/emacs/manual/html_node/emacs/General-Variables.html
>
> It is a confusing statement, see:
> - https://debbugs.gnu.org/cgi/bugreport.cgi?bug=29645
>   #29645 Feature Request: Locale aware formatting
>   Date: Sun, 10 Dec 2017 15:05:02 UTC
> - https://lists.gnu.org/archive/html/emacs-devel/2021-06/msg00327.html
>   https://lists.gnu.org/archive/html/emacs-devel/2021-06/msg00139.html
>
> The state of numeric locales in Emacs is a little worse than just
> unsupported. Mostly "C" is forced for LC_NUMERIC, so e.g. grouping is
> not used.

I see. I am surprised by the disparity between documentation and
reality, given the quality I have learned to associate with emacs.

Thank you very much,

Jarmo



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Org table: numeric locale
  2021-09-05 11:08   ` Jarmo Hurri
@ 2021-09-07 14:47     ` Max Nikulin
  0 siblings, 0 replies; 4+ messages in thread
From: Max Nikulin @ 2021-09-07 14:47 UTC (permalink / raw)
  To: emacs-orgmode

On 05/09/2021 18:08, Jarmo Hurri wrote:
> Maxim Nikulin writes:
>> On 28/08/2021 14:07, Jarmo Hurri wrote:
> 
>>> Emacs documentation says that Emacs uses the value of LC_NUMERIC:
>>> https://www.gnu.org/software/emacs/manual/html_node/emacs/General-Variables.html
>>
>> It is a confusing statement, see:
>> - https://debbugs.gnu.org/cgi/bugreport.cgi?bug=29645
>>    #29645 Feature Request: Locale aware formatting
...
> I see. I am surprised by the disparity between documentation and
> reality, given the quality I have learned to associate with emacs.

You may report a documentation-related bug to debbugs.gnu.org. Far in 
the past there were some changes in the code, maybe update of 
documentation was forgotten.

src/ChangeLog.6

1996-04-08  Richard Stallman  <rms@mole.gnu.ai.mit.edu>
         (x_term_init): Restore LC_TIME as well as LC_NUMERIC.
1995-07-16  Richard Stallman  <rms@gnu.ai.mit.edu>
	(x_term_init) [HAVE_X11XTR6]: Set LC_NUMERIC and LC_TIME back to C.

Git archeology may provide more detailed info, though I have not tried.




^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-09-07 14:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-28  7:07 Org table: numeric locale Jarmo Hurri
2021-08-28 10:19 ` Maxim Nikulin
2021-09-05 11:08   ` Jarmo Hurri
2021-09-07 14:47     ` Max Nikulin

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).