如何在方案(drracket)中进行浮动转换?
How to do floating conversions in scheme (drracket)?
我想在方案语言中进行一些 bin 到 hex、hex 到 bin、hex 到 dec 等的转换。但我不习惯像高级用户那样打球。我需要将 3x4 实现为所有可能的二进制、十六进制、八进制和十进制对。
到目前为止我只实现了 bin 到 dec 的实现,但我没有处理其他人的想法,任何人都可以给我一些提示、想法或代码块以及所有有助于改进我的实现的方法吗?
我把我的垃圾桶放在了下面,谢谢大家。
(define (bin-to-dec x)
(if (zero? x)
x
(+ (modulo x 10) (* 2 (bin->dec (quotient x 10))))))
祝你有个愉快的一天,注意安全。
Racket 有内置程序来处理这类事情。 number->string
将采用指定基数中的数字和 return 字符串表示形式。如果输入可以数字文字的形式给出,你可以这样做:
(number->string #b11111 16) ==> "1f"
如果目标是在字符串表示之间进行转换,以上可以与内置 string->number
结合使用,例如:
(define (nstring->nstring nstring radix-in radix-out)
(number->string (string->number nstring radix-in) radix-out))
scratch.rkt> (nstring->nstring "11111" 2 16)
"1f"
scratch.rkt> (nstring->nstring "31" 10 2)
"11111"
scratch.rkt> (nstring->nstring "1f" 16 10)
"31"
第二个你在 Scheme 中有一个 fixnum(整数),基数并不重要,因为数字没有基数。原因是 base 与数字的视觉编码有关。例如。 10 可以写成 #b1010
#xa
#o12
所有这些都将在 Scheme repl 中显示 10
因为 repl 以十进制显示数字表示:
#b1010 ; ==> 10
#xa ; ==> 10
#o12 ; ==> 10
如果你想以不同的基数打印一个数字,当数字从数字变为可视化表示(例如字符串)时,你可以这样做。 Scheme 有这个 number->string
(number->string 10 2) ; ==> "1010"
(number->string 10 16) ; ==> "a"
(number->string 10 8) ; ==> "12"
还有string->int
做相反的事情:
(string->number "1010" 2) ; ==> 10
(string->number "a" 16) ; ==> 10
(string->number "12" 8) ; ==> 10
您的实现 bin->dec
将任何基数作为输入并将其十进制可视化转换为二进制到十进制。例如
(bin-to-dec #b1010) ; ==> 2
我想在方案语言中进行一些 bin 到 hex、hex 到 bin、hex 到 dec 等的转换。但我不习惯像高级用户那样打球。我需要将 3x4 实现为所有可能的二进制、十六进制、八进制和十进制对。
到目前为止我只实现了 bin 到 dec 的实现,但我没有处理其他人的想法,任何人都可以给我一些提示、想法或代码块以及所有有助于改进我的实现的方法吗?
我把我的垃圾桶放在了下面,谢谢大家。
(define (bin-to-dec x)
(if (zero? x)
x
(+ (modulo x 10) (* 2 (bin->dec (quotient x 10))))))
祝你有个愉快的一天,注意安全。
Racket 有内置程序来处理这类事情。 number->string
将采用指定基数中的数字和 return 字符串表示形式。如果输入可以数字文字的形式给出,你可以这样做:
(number->string #b11111 16) ==> "1f"
如果目标是在字符串表示之间进行转换,以上可以与内置 string->number
结合使用,例如:
(define (nstring->nstring nstring radix-in radix-out)
(number->string (string->number nstring radix-in) radix-out))
scratch.rkt> (nstring->nstring "11111" 2 16)
"1f"
scratch.rkt> (nstring->nstring "31" 10 2)
"11111"
scratch.rkt> (nstring->nstring "1f" 16 10)
"31"
第二个你在 Scheme 中有一个 fixnum(整数),基数并不重要,因为数字没有基数。原因是 base 与数字的视觉编码有关。例如。 10 可以写成 #b1010
#xa
#o12
所有这些都将在 Scheme repl 中显示 10
因为 repl 以十进制显示数字表示:
#b1010 ; ==> 10
#xa ; ==> 10
#o12 ; ==> 10
如果你想以不同的基数打印一个数字,当数字从数字变为可视化表示(例如字符串)时,你可以这样做。 Scheme 有这个 number->string
(number->string 10 2) ; ==> "1010"
(number->string 10 16) ; ==> "a"
(number->string 10 8) ; ==> "12"
还有string->int
做相反的事情:
(string->number "1010" 2) ; ==> 10
(string->number "a" 16) ; ==> 10
(string->number "12" 8) ; ==> 10
您的实现 bin->dec
将任何基数作为输入并将其十进制可视化转换为二进制到十进制。例如
(bin-to-dec #b1010) ; ==> 2