Raku의 base — 숫자를 다른 진법 문자열로 변환하기
Raku의 base — 숫자를 다른 진법 문자열로 변환하기
숫자를 16진수나 2진수 같은 문자열로 바꿔야 할 때가 있어요. base 메서드는 실수(Real)를 지정한 진법의 문자열로 변환해 줘요. $base가 10보다 크면 대문자 라틴 글자를 써요.
method base(Real:D: Int:D $base where 2..36, $digits? --> Str:D)
본문
숫자를 $base를 진법으로 해서 문자열로 바꿔요.
255.base(16); # 'FF'
선택적인 $digits 인자는 소수부를 몇 자리까지 볼지를 요청해요(음수는 불가능해요). 생략하면 타입에 따라 합리적인 기본값이 골라져요. Int는 0, Num은 8이 기본이고, Rational은 분모 크기에 맞춰 자릿수가 조정되는데 최소 6자리예요.
$digits로 Whatever(*)라는 특별한 값을 줄 수도 있어요. Rational을 제외한 모든 Real 타입에서는 $digits를 지정하지 않은 것과 같게 동작해요. 그런데 Rational에서는 소수부의 가능한 모든 자릿수를 원한다는 뜻이에요. 여기서 주의가 필요해요. 반복되는 소수부를 감지하지 않으므로, 알고리즘이 한계(2**63 자리 생성 후)에 도달할 때까지는 멈추지 않거든요.
say pi.base(10, 3); # OUTPUT: «3.142»
say (1/128).base(10, *); # OUTPUT: «0.0078125»
say (1/100).base(10, *); # OUTPUT: «0.01»
say (1/3) .base(10, *); # WRONG: endlessly repeating fractional part
마지막으로, 만들어지는 마지막 자리는 항상 반올림돼요. 반대 방향, 즉 문자열을 숫자로 되돌리는 작업은 parse-base를 참고하세요.