GNU bug report logs -
#41347
28.0.50; calculator.el: Cannot input negative exponents
Previous Next
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
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.