GNU bug report logs - #41347
28.0.50; calculator.el: Cannot input negative exponents

Previous Next

Package: emacs;

Reported by: Chris Zheng <chriszheng99 <at> gmail.com>

Date: Sun, 17 May 2020 05:54:02 UTC

Severity: normal

Found in version 28.0.50

Done: Mattias EngdegÄrd <mattiase <at> acm.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Chris Zheng <chriszheng99 <at> gmail.com>
Subject: bug#41347: closed (Re: bug#41347: 28.0.50; calculator.el: Cannot
 input negative exponents )
Date: Mon, 18 May 2020 09:29:02 +0000
[Message part 1 (text/plain, inline)]
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 41347 <at> debbugs.gnu.org.

-- 
41347: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=41347
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Mattias EngdegÄrd <mattiase <at> acm.org>
To: Eli Barzilay <eli <at> barzilay.org>
Cc: 41347-done <at> debbugs.gnu.org, Chris Zheng <chriszheng99 <at> gmail.com>
Subject: Re: bug#41347: 28.0.50; calculator.el: Cannot input negative
 exponents 
Date: Mon, 18 May 2020 11:28:21 +0200
[Message part 3 (text/plain, inline)]
17 maj 2020 kl. 22.26 skrev Eli Barzilay <eli <at> barzilay.org>:

> 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.

[0001-Fix-calculator-entry-of-numbers-with-negative-expone.patch (application/octet-stream, attachment)]
[Message part 5 (message/rfc822, inline)]
From: Chris Zheng <chriszheng99 <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 28.0.50; calculator.el: Cannot input negative exponents
Date: Sun, 17 May 2020 13:53:12 +0800
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 <chriszheng99 <at> gmail.com>
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




This bug report was last modified 5 years and 5 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.