計算結果を分数から小数にしたい - lisp-cookbook-ja/common-lisp GitHub Wiki

数値

計算結果を分数から小数にしたい

分数の状態は、計算結果が ratio となっているので float 関数で変換します。

(float (/ 2 3)) ;=> 0.6666667

double-floatにしたい場合は二番目の引数に適当に double-float を指定します。

(float (/ 2 3) 1.0d0)                   ;=> 0.6666666666666666d0

変換するだけならば、coerce を使ったり適当に演算したりという方法もあります。

(coerce 2/3 'double-float)              ;=> 0.6666666666666666d0
(* 2/3 1.0d0)                           ;=> 0.6666666666666666d0
(+ 2/3 0.0d0)                           ;=> 0.6666666666666666d0

計算結果を小数から分数にしたい

rationalまたはrationalizeを使います。

(rational 0.6666667)
;=> 11184811/16777216
(rationalize 0.6666667)
;=> 2/3

rationalが厳密に等しい有理数を返すのにたいし、rationalizeは浮動小数点表現の精度を考慮した近似値を返します。