FC2ブログ
    10 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 12

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンUnityブログ】一部海外でのfloat等小数点区切り文字が,(カンマ)で問題がでてしまう件 

    こんにちは。坂内っす。
    ご機嫌麗しゅう?

    ポケットガール~受け継がれし希望~よろしくお願いします。
    URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
    URL(iOS):https://itunes.apple.com/jp/app/id1539553611

    PV:


    Unityで扱うfloatって「0.3」とか「122.22」とかって数値が入るじゃないですか。
    これ、一部の海外だと「0,3」や「122,22」ってなっちゃうの知ってます?

    [Oracleの区切り文字に関するガイド]
    https://docs.oracle.com/cd/E19455-01/806-2727/overview-9/index.html#:~:text=%E3%82%A4%E3%82%AE%E3%83%AA%E3%82%B9%E3%81%A8%E7%B1%B3%E5%9B%BD%E3%81%A7%E3%81%AF%E5%B0%8F%E6%95%B0,%E5%8C%BA%E5%88%87%E3%81%A3%E3%81%9F%E3%82%8A%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

    こんな感じでフランス式の国では、小数点が,(カンマ)で区切られるようです。

    Unityでもこれは対応されており、以下のようなコードを端末にビルドして、端末の言語設定を変えることで確認できます。

    [Blog1120.cs]

    using TMPro;
    using UnityEngine;

    public class Blog1120 : MonoBehaviour
    {
    [SerializeField] TMP_Text lbl1;
    [SerializeField] TMP_Text lbl2;

    void Start()
    {
    float flt = 0.3f;
    lbl1.text = flt.ToString();

    lbl2.text = (flt * 2f).ToString();
    }

    }



    日本語設定


    フランス語設定



    こんな感じ。
    ちゃんカンマの小数点でも計算はしてくれますので問題はありません。

    しかし、こんなコードが混ざっていると問題がおきます。


    using TMPro;
    using UnityEngine;

    public class Blog1120 : MonoBehaviour
    {
    [SerializeField] TMP_Text lbl1;
    [SerializeField] TMP_Text lbl2;

    void Start()
    {
    float flt = 0.3f;
    lbl1.text = flt.ToString();

    // 小数点のカンマ以降を取得
    string[] ary = flt.ToString().Split(".");
    lbl2.text = ary[1];
    }
    }



    こんなことをした場合、結果が変わってきます。

    日本語設定



    フランス語設定



    フランス語のほうは以下のエラーが出てしまいます。

    IndexOutOfRangeException: Index was outside the bounds of the array.
    at Blog1120.Start () [0x0002b] in :0

    ドットがないため、ary[0]に「0,3」が入り、ary[1]には何も入らない状況になります。

    対応策としては、Splitなどを複数charで行うことでできそうです。

    string[] ary = flt.ToString().Split(new char[] {'.', ','});

    ということで、一部海外(フランス式)のfloatやdoubleでの小数点の区切り文字問題の対応でした。


    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0