Wenn ich Zahlen in Clojure teile, erhalte ich einen Bruch. Wie erhalte ich die Dezimalstelle?

76

Wenn ich das tue (/ 411 125), verstehe ich es nicht als Dezimalzahl. Wie mache ich das?

unj2
quelle

Antworten:

90
user> (float (/ 411 125))
3.288
user> (double (/ 411 125))
3.288
Brian Carper
quelle
33
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
Jacek Laskowski
quelle
Doc funktioniert nicht für mich. Ich habe die gleiche Version von Clojure. Muss ich etwas importieren?
Justinhj
1
Entschuldigung, ich hätte es sagen sollen - es ist eine von leiningen verwaltete REPL-Sitzung . Es ist das Projektmanagement-Tool (und damit das Abhängigkeitsmanagement) für Clojure-Projekte. Sobald Sie es in Gang gebracht haben, werden Sie es nicht bereuen.
Jacek Laskowski
Ich benutze auch leiningen
justinhj
Welche Version von Lein verwenden Sie? Ich bin bei lein 2 aus den Quellen gebaut.
Jacek Laskowski
1
Ich bin froh zu hören, dass es endlich gut funktioniert hat. Herzliche Glückwünsche! Behalten Sie Fragen zu doc ​​und Clojure im Auge, wenn Schleim verwendet wird - Sie können dies jetzt sehr einfach klären.
Jacek Laskowski
14

Wie dokumentiert , ergibt die Ganzzahldivision rationale Zahlen. Versuchen

(/ 411.0 125)
Jonathan Feinberg
quelle
7

Wenn Sie einen Float für die Dividende verwenden, erhalten Sie eine Dezimalantwort.

(/ 22.0 7) -> 3.142857142857143

Es gibt auch die Funktion (ungeprüfter Rest xy) .

ire_and_curses
quelle
6

Auch das wird funktionieren:

(/ 22. 7) => 3.142857142857143
Samir
quelle
1
Sie sollten auch einige Erklärungen hinzufügen, warum Ihr Code funktioniert und was im Originalcode falsch ist.
Vyegorov
1
An anderen Lösungen ist nichts auszusetzen, aber - wie bei anderen Lösungen - ich vertrete eine andere Denkweise im Doppel. warum es funktioniert; Ich bin mir nicht sicher, aber ich denke, Clojure hat es von Java geerbt, das jede Ziffer mit Dezimalpunkt als Double akzeptiert, auch wenn es mit einer Dezimalstelle von Null formatiert ist
Samir
1

(float 411/125)ist eine andere Variante, wenn Sie die Zahlen direkt erhalten, was der Fall ist, wenn Sie nur die REPL als Taschenrechner verwenden. Leider sind dies einige Zeichen länger als die Lösung von Jonathan Feinberg und ire_and_curses. ;)

user1460043
quelle