SetFormat

수학 연산으로 생성된 부동 소수점 수나 정수의 형식을 설정합니다.

SetFormat, NumberType, Format
선택

매개변수

NumberType

반드시 다음 중 하나입니다: IntegerFast, FloatFast, Integer, 또는 Float (두 개의 빠른 모드는 v1.0.48+를 요구합니다; 논평 참조).

Format

NumberType Integer 또는 IntegerFast에 대하여, 십육진수는 H 또는 HEX를 지정하거나, 또는 십진수이면 D를 지정하십시오. 십육진수는 모두 접두사 0x로 시작합니다 (예, 0xFF). [v1.0.90+]: 십육진 정수는 A-F 자리의 형식이 이 매개변수가 h이면 소문자이고 H이면 대문자입니다.

NumberType Float 또는 FloatFast에 대하여, TotalWidth.DecimalPlaces를 지정하십시오 (예, 0.6). v1.0.46.11+에서, 기호 "e"를 추가해 과학 표기법을 만들어 낼 수 있습니다; 예, 0.6e 또는 0.6E (대문자를 사용하면 각 숫자에 소문자가 아니라 대문자 E를 생산합니다). 주의: AutoHotkey 1.x에서, 과학적 표기법은 반드시 소수 점을 포함해야 합니다; 예, 1.0e1는 유효하지만 1e1는 유효하지 않습니다.

TotalWidth는 전형적으로 0입니다. 그 숫자에 빈 공간이 있거나 0으로 덧대면 안된다는 뜻입니다. 더 높은 값을 사용하면, 그 너비만큼 만들기 위해 숫자들은 스페이스나 0으로 덧대어집니다 (논평 참조).

DecimalPlaces는 보여줄 소수 점 자리의 갯수입니다. (반올림이 일어납니다). 비어 있거나 0이면, 소수점 부분도 소수점도 보여주지 않습니다. 즉, 부동 소수점 수의 결과는 정수로 화면에 보여줍니다. 시작 기본 값은 6입니다.

Padding: 만약 TotalWidth가 패딩을 야기할 만큼 높다면, 스페이스가 그 왼쪽에 추가됩니다; 즉, 각 숫자는 오른쪽으로 정렬됩니다. 대신에 왼쪽 정렬을 하려면, TotalWidth 앞에 마이너스 사인을 추가하십시오. 스페이스 대신에 0으로 덧대려면, TotalWidth 앞에 0을 추가하십시오 (예, 06.2).

빠른 모드 vs. 느린 모드

v1.0.48+에서, Integer 대신에 IntegerFast 그리고 Float 대신에 FloatFast를 사용할 수 있습니다.
  • 장점: 빠른 모드는 부동 소수점 수와 정수를 캐쉬하는 변수의 능력을 보존합니다. 이 덕분에 숫치 집약적인 연산이 눈에 띄게 빨라집니다. (대조적으로, 느린 모드는 모든 수치 결과를 즉시 문자열로 변환해 저장하도록 강제합니다.)
  • 단점: 숫자를 변수에 저장할 때, 빠른 모드는 (예, MsgBox 안에 보여주기 위해) 스크립트가 실제로 텍스트/문자열 버전의 변수를 필요로 할 때까지 SetFormat의 효과를 지연시킵니다. 그 순간 다양한 SetFormat이 효과가 있을 수 있기 때문에 (예, 소수점 자리수가 더 많거나 적을 수 있으므로), 예상치 못한 결과에 이를 수 있습니다. 현재의 빠른 포맷을 즉시 적용하려면, HexValue .= ""과 같은 연산을 사용하십시오. 이 코드는 빈 문자열을 현재 HexValue에 저장된 숫자에 추가합니다.

느린 모드인 "Integer" 또는 "Float"가 스크립트 어디서든 사용된다면, SetFormat 줄이 전혀 실행되지 않더라도, 정수나 부동 소수점 수의 캐쉬는 (각각) 스크립트가 기동하는 순간 꺼집니다.

부동 소수점 형식

v1.0.48+에서, 부동 소수점 변수는 대략 내부적으로 15 자리의 정밀도를 가집니다. 단, SetFormat Float (즉, 느린 모드)가 스크립트에 존재하는 경우는 예외입니다. 이 경우 저장된 정밀도의 부동 소수점 수는 DecimalPlaces에 의하여 결정됩니다 (pre-1.0.48 버전과 같습니다). 다른 말로, 부동 소수점 수의 결과가 일단 변수 안에 저장되면, 여분의 정밀도는 소실됩니다. 그리고 SetFormat, Float, 0.15와 같은 것으로 다시 계산을 하지 않고는 다시 요청할 수 없습니다. 이런 정밀도의 손실을 피하려면, SetFormat Float을 스크립트에 사용하지 마십시오. 다시 말해, 대신 SetFormat FloatFast를 사용하십시오.

느린 모드이든 빠른 모드이든 상관 없이, 부동 소수점 수가 결과이고 변수는 텍스트 문자열로 변환되거나 보여질 때 DecimalPlaces로 내림됩니다. (예, MsgBox 또는 FileAppend). 완벽한 정밀도를 보려면, 다음 SetFormat, FloatFast, 0.15과 같이 사용하십시오.

부동 소수점 수를 정수로 변환하려면, Var:=Round(Var), Var:=Floor(Var), 또는 Var:=Ceil(Var)를 사용하십시오. 정수를 부동 소수점 서로 변환하려면, 0.0을 더하십시오 (예, Var+=0.0) 또는 다음 MyFloat:=Round(MyInteger, 1)처럼 사용하십시오.

내장 변수 A_FormatFloat에는 현재 부동 소수점 형식이 포함되어 있습니다 (예, 0.6).

정수 포맷

정수 결과는 보통 십육진수가 아니라 십진수로 보여줍니다. 십육진수로 전환하려면, SetFormat, IntegerFast, Hex를 사용하십시오. 이것은 도 정수를 십진수에서 십육진수로 (또는 그 반대로) 변화하는데에도 사용할 수 있습니다. 이 페이지 맨 아래에 예제에 보여줍니다.

스크립트에 지정된 기호 그대로의 정수는 십육진수 또는 십진수로 쓸 수 있습니다. 십육진 정수는 모두 접두사 0x로 시작합니다 (예, 0xA9). 숫치 값이 예상되는 곳이면 어디든 사용할 수 있습니다. 예를 들어, Sleep 0xFFSleep 255와 동등합니다. SetFormat으로 설정된 현재 정수의 형식에 상관이 없습니다.

AutoHotkey는 64-비트 부호있는 정수를 지원합니다. 그 범위는 -9223372036854775808 (-0x8000000000000000)부터 9223372036854775807 (0x7FFFFFFFFFFFFFFF) 까지입니다.

내장 변수 A_FormatInteger에 현재 정수 형식이 들어 있습니다 (H 또는 D).

총평

SetFormat이 스크립트에 사용되지 않으면, 정수는 기본값이 십진 형식이고, 부동 소수점 수는 기본값이 TotalWidth.DecimalPlaces = 0.6입니다. 새로 기동된 쓰레드는 모두 (예를 들어 핫키, 맞춤 메뉴 항목, 또는 타이머 서브루틴) 다음 기본 값을 가지고 새롭게 시작합니다; 그러나 이 기본값은 자동 실행 섹션 (스크립트의 상단)에서 SetFormat를 사용하여 바꿀 수 있습니다.

x=%y%와 같은 예전-스타일의 할당은 앞 뒤에 스페이스를 생략합니다 (즉, 패딩). 이를 피하려면, AutoTrim 또는 쌍점-등호 연산자를 사용하십시오 (예, x:=y).

"if var is number/integer/float"를 사용하면 변수에 수치 값이 들어 있는지 알아낼 수 있습니다.

부동 소수점 수 연산을 할 필요 없이 정수에 0 또는 스페이스를 덧대려면, 다음 예제를 따르십시오:

Var := "          " . Var     ; 따옴표 안에 10개의 스페이스가 들어 있습니다.  0으로 덧대려면, 스페이스를 0으로 교체하십시오.
StringRight, Var, Var, 10  ; Var 안에 있는 숫자에 스페이스를 덧대 총 너비가 10 문자에 맞도록 만듭니다.
Var := SubStr("          " . Var, -9)  ; 위의 두 줄을 한 줄로 대신합니다.
선택 | 내려받기

관련 항목

Format(), 표현식 할당 (:=), EnvAdd, EnvSub, EnvMult, EnvDiv, AutoTrim, if var is type

예제

Var = 11.333333
SetFormat, float, 6.2
Var -= 1  ; Var에 10.33을 설정합니다. 총 너비가 6이므로 앞에 스페이스가 하나 있습니다.
SetFormat, float, 0.2
Var += 1  ; Var에 11.33을 설정합니다. 앞에 스페이스가 없습니다.
SetFormat, float, 06.0
Var += 0  ; Var에 000011을 설정합니다.

; 십진 정수를 십육진 형식으로 변환합니다:
SetFormat, IntegerFast, hex
Var += 0  ; Var에 0xb를 설정합니다 (이전에 11이 들어 있었습니다).
Var .= ""  ; "빠른" 모드이기 때문에 필수입니다.
SetFormat, IntegerFast, d
선택 | 내려받기