Как разделить числа на целые и дробные части в схеме?
Я хочу функцию number->second-pair
который принимает число и возвращает пару целых чисел, представляющих его целую часть и дробную часть, умноженную на 1000000.
то есть:
(number->second-pair 1)
; returns (1 . 0)
; 1 sec -> (1 sec + 0 usec)
(number->second-pair 5.1234)
; returns (5 . 123400)
; 5.1234 sec -> (5 sec + 123400 usec)
Возможно, вам будет легко найти решение, но я искал много документов и, к сожалению, не могу найти способ конвертировать числа в целые числа. Кто-нибудь может мне помочь?
КСТАТИ:
На самом деле я хочу точный alarm
( этот), используя setitimer
, поэтому я хочу, чтобы точные целые числа передавались в качестве аргументов.
1 ответ
Решение
Я, может быть, немного подзабыл со схемой, но я думаю, что-то вроде этого будет работать для вас,
(define (number->second-pair n)
(cons (inexact->exact (floor n))
(inexact->exact (floor (* 1000000 (- n (floor n)))))))
(number->second-pair 5.1234)
возвращается (5 . 123400)
(number->second-pair 1)
возвращается (1 . 0)