You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
21 lines
1.0 KiB
Racket
21 lines
1.0 KiB
Racket
11 years ago
|
#lang racket/base
|
||
9 years ago
|
(require "../define.rkt" racket/set "../coerce.rkt")
|
||
11 years ago
|
|
||
9 years ago
|
|
||
|
(define+provide+safe (bytecount->string bytecount)
|
||
|
(integer? . -> . string?)
|
||
11 years ago
|
(define (format-with-threshold threshold suffix)
|
||
|
;; upconvert by factor of 100 to get two digits after decimal
|
||
|
(format "~a ~a" (exact->inexact (/ (round ((* bytecount 100) . / . threshold)) 100)) suffix))
|
||
|
|
||
|
(define threshold-kilobyte 1000)
|
||
|
(define threshold-megabyte (threshold-kilobyte . * . threshold-kilobyte))
|
||
|
(define threshold-gigabyte (threshold-megabyte . * . threshold-kilobyte))
|
||
|
(define threshold-terabyte (threshold-gigabyte . * . threshold-kilobyte))
|
||
|
|
||
|
(cond
|
||
|
[(bytecount . >= . threshold-terabyte) (format-with-threshold threshold-terabyte "TB")]
|
||
|
[(bytecount . >= . threshold-gigabyte) (format-with-threshold threshold-gigabyte "GB")]
|
||
|
[(bytecount . >= . threshold-megabyte) (format-with-threshold threshold-megabyte "MB")]
|
||
|
[(bytecount . >= . threshold-kilobyte) (format-with-threshold threshold-kilobyte "KB")]
|
||
9 years ago
|
[else (format "~a bytes" bytecount)]))
|