Skip to content

Commit f7d7908

Browse files
authored
Fix rendering of number whose magnitude is greater than 2^53 (#727)
Only numbers with magnitude no greater than 2^53 are precisely representable in JavaScript Number type.
1 parent 748f73e commit f7d7908

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

src/nextjournal/clerk/viewer.cljc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -867,7 +867,9 @@
867867
:render-fn 'nextjournal.clerk.render/render-number
868868
#?@(:clj [:transform-fn (update-val #(cond-> %
869869
(or (instance? clojure.lang.Ratio %)
870-
(instance? clojure.lang.BigInt %)) pr-str))])})
870+
(instance? clojure.lang.BigInt %)
871+
(> % 9007199254740992)
872+
(< % -9007199254740992)) pr-str))])})
871873

872874
(def number-hex-viewer
873875
{:name `number-hex-viewer :render-fn '(fn [num] (nextjournal.clerk.render/render-number (str "0x" (.toString (js/Number. num) 16))))})

test/nextjournal/clerk/viewer_test.clj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,11 @@
249249
(is (match? {:nextjournal/value "1142497398145249635243N"}
250250
(v/present 1142497398145249635243N)))
251251
(is (match? {:nextjournal/value "10/33"}
252-
(v/present 10/33))))
252+
(v/present 10/33)))
253+
(is (match? {:nextjournal/value "9007199254740993"}
254+
(v/present 9007199254740993)))
255+
(is (match? {:nextjournal/value "-9007199254740993"}
256+
(v/present -9007199254740993))))
253257

254258
(testing "opts are not propagated to children during presentation"
255259
(let [count-opts (fn [o]

0 commit comments

Comments
 (0)