Как разделить числа на целые и дробные части в схеме?

Я хочу функцию 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)

Другие вопросы по тегам