【Unity】TextMeshPro.SetTextで表現できる整数値の限界

Unity

TextMeshProでGC Allocを発生させない方法としてSetTextはとても重宝します。

しかしこの関数の引数はなんとfloat型です。ということは誤差のため表示できる整数値には限界があります。試しに大きな整数値を設定してみたところ表示がバグってしまいました。

上は.text=形式、下は.SetText形式
https://ja.wikipedia.org/wiki/%E5%8D%98%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0

floatの仮数部は23ビットなので2の23乗の8388608までなら正常に表示できます。

    public static void SafeSetText(this TextMeshProUGUI text, string sz, int i0)
    {
        Warning.IsTrue(-8388608 <= i0 && i0 <= 8388608);
        text.SetText(sz, (float)i0);
    }

というわけでザックリこういう拡張メソッドを作成して使うとよさそうです。大きい値にも対応したければstatic char[]とかに自前でformat解析するとかになるんでしょうか?

個人的には大きい値は特殊対応するくらいでいいかなと思います。100万越えの値って使うところ限られると思います。