2016-03-19 20 views
1

Ich habe triviale Probleme Umwandlung ganzzahliger Division in eine Gleitkomma Lösung in Emacs Lisp 24.5.1.Convert Integer in Float in Elisp

(message "divide: %2.1f" (float (/ 1 2))) 
"divide: 0.0" 

ich diesen Ausdruck glauben ersten 1/2 rechnet, findet es 0 nach Kürzen ist, dann 0.0 mit dem Schwimmer zuweisen. Offensichtlich hoffe ich auf 0,5. Was sehe ich hier nicht? Danke

Antwort

4

Die Funktion / führt eine Gleitkommadivision durch, wenn mindestens eines der Argumente ein Float ist, und eine Integer-Quotientenoperation (auf 0 gerundet), wenn alle Argumente Ganzzahlen sind. Wenn Sie eine Gleitkommadivision durchführen möchten, stellen Sie sicher, dass mindestens eines der Argumente ein Float ist.

(message "divide: %2.1f" (/ (float 1) 2)) 

(oder natürlich, wenn sie Konstanten sind, können Sie einfach schreiben (/ 1.0 2) oder (/ 1 2.0))

Viele Programmiersprachen arbeiten auf diese Weise.

+0

Vielen Dank! Solange einer von ihnen ein Float ist, ist das Ergebnis ein Float. Ich wusste das, aber Lisp zu lernen, ließ mich irgendwie hypnotisieren. Danke –

+1

Das Elisp-Handbuch, Knoten [Arithmetische Operationen] (http://www.gnu.org/software/emacs/manual/html_node/elisp/Arithmetic-Operations.html), erklärt dies. – Drew