2016-03-19 5 views
1

Je rencontre des problèmes triviaux lors de la conversion d'une division entière en une solution à virgule flottante dans Emacs Lisp 24.5.1.Convertir un entier en flottant dans Elisp

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

Je crois que cette expression est d'abord calculer 1/2, trouve qu'il est 0 après troncature, puis attribuer 0,0 au flotteur. Évidemment, j'espère 0.5. Qu'est-ce que je ne vois pas ici? Merci

Répondre

4

La fonction / effectue une division à virgule flottante si au moins un de ses arguments est un flottant et une opération de quotient entier (arrondie à 0) si tous ses arguments sont des entiers. Si vous voulez effectuer une division en virgule flottante, assurez-vous qu'au moins un des arguments est un flottant.

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

(ou bien sûr si elles sont constantes, vous pouvez simplement écrire (/ 1.0 2) ou (/ 1 2.0))

De nombreux langages de programmation fonctionnent de cette manière.

+0

Merci beaucoup! Tant que l'un d'eux est un flotteur, le résultat est un flotteur. Je le savais, mais apprendre Lisp m'avait hypnotisé d'une certaine façon. Merci –

+1

Le manuel Elisp, node [Opérations arithmétiques] (http://www.gnu.org/software/emacs/manual/html_node/elisp/Arithmetic-Operations.html), explique cela. – Drew