あなたはこれを試すことができます:あなたは、彼らがバイナリ表現があり、変換が不正確なことができるので、実際の数値をフォーマットする場合は、番号を指定する精度のパラメータを追加する必要が
(define (addcommas n)
(define (split n acc)
(if (< (abs n) 1000)
(cons n acc)
(let-values ([(quot rem) (quotient/remainder n 1000)])
(split quot (cons (abs rem) acc)))))
(apply ~a (split n '()) #:separator ","))
(addcommas -2332342390)
;; -> "-2,332,342,390"
(define (addcommas-real n precision)
(let* ((int-part (exact-truncate n))
(float-part (exact-truncate (* (- n int-part) (expt 10 precision)))))
(~a (addcommas int-part) "." (abs float-part))))
(addcommas-real -2332342390.34 2)
;; -> "-2,332,342,390.34"
(addcommas-real -2332342390.34 5)
;; -> "-2,332,342,390.34000"
送信される値が常に正の値であれば機能を単純化できますか? – rnso
2つの 'abs'呼び出しを単に削除してください。 – Renzo
私は、小数点の扱いがはるかに複雑になると考えています。 – rnso