独自のフォーマッタを実装します。以下は、単純化されたフォーマッタの例です。
最後からバッファを塗りつぶし、開始インデックスを返します。 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
は、あなたの 'charは[]'桁または何が含まれていますか? – Midnightas
最初は何も含まれていません。 drawText()メソッドでこのchar配列を使用するには、自分の数値をchar []に変換するだけで済みます。文字列と異なり、char []は事前に初期化することができます。 – Bashalex
あなたは魔法のように浮動小数点を文字に変換することはできませんし、これを念頭において構築できるものは、文字列を使用することと多かれ少なかれ同じでしょうか? – Silverclaw