R6RS:翻訳:R6RS:11.7.4.4 Numerical Input and Output

R6RS:翻訳:R6RS:11.7.4.4 Numerical Input and Output

11.7.4.4 数値の入出力

[procedure] (number->string z)

[procedure] (number->string z radix)

[procedure] (number->string z radix precision)

radix は 2、 8、 10、 16 のいずれかの正確な整数オブジェクトでなければならない。省略された場合には radix の既定値は 10 になる。 precision が指定された場合、 z は不正確な複素数オブジェクトでなければならず、 precision は正確な正の整数であり、 radix は 10 でなければならない。 number->string 手続きは数値オブジェクトと基数を取り、与えられた数値オブジェクトについて、与えられた基数で次の式を満たすような外部表現を文字列として返す。

(let ((number z) (radix radix))
  (eqv? (string->number
          (number->string number radix)
          radix)
        number))

この式を満たすことのできる結果がない場合には、 &implementation-restriction コンディション型の例外が発生する。

: エラーの起こる可能性のあるのは z が複素数オブジェクトでないか、有理数でない実部か虚部を持つ複素数である場合である。

precision が指定された場合、戻り値の不正確な実数要素の表現は、それが無限大や非数でない場合、 <mantissa width> p を陽に指定する。ここで、 p は上記の式を満たす最小の pprecision である。

z が不正確であり、 radix が 10 であり、上記の式と条件が小数点を含めて満たされる場合、戻り値は小数点を含み、上記の式と条件を満たすのに(指数部分、後続する 0、仮数部を除いて)最小限の数字を使って表現される[4, 7]。さもなくは、戻り値の形式は未規定である。

number->string の戻り値には基数接頭辞が明示されない。

[procedure] (string->number string)

[procedure] (string->number string radix)

与えられた文字列により表現された数値オブジェクトの最大限精確な表現を返す。 radix は 2、 8、 10、 16 のいずれかの正確な整数オブジェクトでなければならない。 radix が指定された場合、これは既定の基数になるが、文字列の基数接頭辞(例: "#o177")で上書きされることもある。 radix が指定されなかった場合、既定の基数は 10 である。文字列が数値オブジェクトとして構文上妥当でない表記であった場合や、分母が 0 の有理数の表記であった場合、 string->number は #f を返す。

(string->number "100")                         ⇒  100
(string->number "100" 16)                      ⇒  256
(string->number "1e2")                         ⇒  100.0
(string->number "0/0")                         ⇒  #f
(string->number "+inf.0")                      ⇒  +inf.0
(string->number "-inf.0")                      ⇒  -inf.0
(string->number "+nan.0")                      ⇒  +nan.0

: string->number 手続きは常に数値オブジェクトか #f を返し例外を発生させることはしない。

More ...