2009-10-20 7 views

risposta

78
user> (float (/ 411 125)) 
3.288 
user> (double (/ 411 125)) 
3.288 
13

Come documented, la divisione intera produce numeri razionali. Prova

(/ 411.0 125) 
7

Se si utilizza un flottante per il dividendo, si otterrà una risposta decimale.

(/ 22.0 7) -> 3.142857142857143 

C'è anche la funzione (unchecked-remainder x y) disponibile.

27
user=> (clojure-version) 
"1.4.0" 

user=> (doc quot) 
------------------------- 
clojure.core/quot 
([num div]) 
    quot[ient] of dividing numerator by denominator. 
nil 

user=> (quot 411 125) 
3 
+0

doc non funziona per me. Ho la stessa versione del clojure. Devo importare qualcosa? – justinhj

+0

Scusa, avrei dovuto dirlo - è una sessione REPL gestita da [leiningen] (http://leiningen.org). È * lo * strumento di gestione del progetto (e quindi della dipendenza) per i progetti Clojure. Una volta che lo fai andare, non te ne pentirai. –

+0

Sto usando leiningen anche – justinhj

1

(float 411/125) è un'altra variante se si è data direttamente le cifre, che è il caso se si sta semplicemente utilizzando il REPL come una calcolatrice. Sfortunatamente si tratta di alcuni caratteri più lunghi della soluzione di Jonathan Feinberg e ire_and_curses. ;)

4

anche questo funzionerà:

(/ 22. 7) => 3.142857142857143 
+0

Dovresti anche includere alcune spiegazioni sul perché il tuo codice funziona e cosa c'è di sbagliato nel codice originale. – vyegorov

+0

non c'è niente di sbagliato in altre soluzioni, ma - come altre soluzioni - sto rappresentando un altro modo di pensare in doppio. per quanto riguarda il motivo per cui funziona; non sono sicuro, ma penso che il clojure l'abbia ereditato da java che accetta qualsiasi cifra con punto decimale come Double anche se è formattata con una posizione decimale zero – Samir