독자적인 포맷터를 구현하십시오. 다음은 단순화 된 포맷터의 예입니다.
끝에서부터 버퍼를 채우고 시작 인덱스를 반환합니다. float가 버퍼에 비해 너무 큰 경우에는 ArrayIndexOutOfBoundsException
으로 실패하고 음수 값, 무한대 및 NaN은 처리하지 않습니다. 나는 너에게 맡길거야.
버퍼가 처음부터 채워져 있어야하는 경우 System.arraycopy()
을 사용하여 문자를 이동하십시오.
보시다시피, 유일한 할당은 char
버퍼입니다.
public static int format(char[] buffer, float value, int decimals) {
float v = value;
for (int i = 0; i < decimals; i++)
v *= 10f;
int num = Math.round(v);
int idx = buffer.length;
for (int i = 0; i < decimals; i++, num /= 10)
buffer[--idx] = (char) ('0' + num % 10);
if (decimals > 0)
buffer[--idx] = '.';
do {
buffer[--idx] = (char) ('0' + num % 10);
} while ((num /= 10) != 0);
return idx;
}
테스트
char[] buffer = new char[10];
int startIdx = format(buffer, (float)Math.PI, 4);
for (int i = startIdx; i < buffer.length; i++)
System.out.print(buffer[i]);
System.out.println();
출력
3.1416
은'문자는 []'숫자 또는 무엇을 포함 하는가? – Midnightas
처음에는 아무것도 포함되어 있지 않습니다. drawText() 메서드에서이 char 배열을 사용하려면 내 번호를 char []로 변환해야합니다. 문자열과는 달리 char []은 미리 초기화 될 수 있습니다. – Bashalex
당신은 마술처럼 수레를 문자로 변환 할 수 없다는 것을 알고 있습니다. 그리고 이것 주위에 만들 수있는 무엇이든이 문자열을 사용하는 것과 거의 같을까요? – Silverclaw