Subject: bug#41347: closed (Re: bug#41347: 28.0.50; calculator.el: Cannot input negative exponents )

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 18 May 2020 09:29:02 +0000

Your bug report

#41347: 28.0.50; calculator.el: Cannot input negative exponents

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
41347: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=41347
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#41347: 28.0.50; calculator.el: Cannot input negative exponents
From: Mattias Engdegård <[email-masked]>
To: Eli Barzilay <[email-masked]>
Cc: [email-masked], Chris Zheng <[email-masked]>
Date: Mon, 18 May 2020 11:28:21 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

17 maj 2020 kl. 22.26 skrev Eli Barzilay <[email-masked]>:

> the idea is to mimic common calculators
> where you can type "3." or "3e" and get 3.

Thank you Eli! I can confirm that after removing all the string transformation prior to the call to string-to-number, everything works as expected except "1.e3" (dot before E). A single transformation taking care of that case was added for the sake of completeness.

The attached patch has now been pushed to master.

Subject: 28.0.50; calculator.el: Cannot input negative exponents
From: Chris Zheng <[email-masked]>
To: [email-masked]
Date: Sun, 17 May 2020 13:53:12 +0800
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello,

With current master, starting Emacs with `-Q`:

1. M-x calculator
2. Input 1e-3 RET

You will get 1 instead of 0.001. I believe this happens since Emacs 26.1. The root cause is the `calculator-string-to-number` function in lisp/calculator.el. Now the function gives

(calculator-string-to-number "1e-3") => 1.0
(calculator-string-to-number "1e3") => 1000.0
(calculator-string-to-number "1e") => 1.0

The funcional code is 

(replace-regexp-in-string
                  "[eE][+-]?\\([^0-9].*\\)?$" "e0\\1" str)

It changes `1e-3` to `1e0-3` that is recognized as 1. I have a possible fix attached below. Please see if it is correct. 

Thank you,

Chris Zheng

 From 7693d7072e4787c4b0663f490be5d83c1d9a6ee3 Mon Sep 17 00:00:00 2001
From: Chris Zheng <[email-masked]>
Date: Sun, 17 May 2020 13:43:35 +0800
Subject: [PATCH 1/1] Fix calculator exponent input

* lisp/calculator.el (calculator-string-to-number): Change the regexp
to correctly deal with negative exponents.
---
  lisp/calculator.el | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lisp/calculator.el b/lisp/calculator.el
index 7e0b2fcc6a..fa3eb19099 100644
--- a/lisp/calculator.el
+++ b/lisp/calculator.el
@@ -863,7 +863,7 @@ calculator-string-to-number
      (let* ((str (replace-regexp-in-string
                   "\\.\\([^0-9].*\\)?$" ".0\\1" str))
             (str (replace-regexp-in-string
-                 "[eE][+-]?\\([^0-9].*\\)?$" "e0\\1" str)))
+                 "[eE]\\([+-]?\\)?$" "e\\10" str)))
        (float (string-to-number str)))))
  
  (defun calculator-push-curnum ()
-- 
2.16.1.windows.1