[小数点]スペインでは1.2が12になることもある[TryParse]

結論から言うと、float.TryParse()等で文字列操作する時は、最初に
```
System.Globalization.CultureInfo.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
```
を宣言しておくと、どの地域でも1.2を1.2のまま読み取ることができます。
<hr>


[AssetStoreで販売中のアセット](https://assetstore.unity.com/packages/vfx/shaders/88-constellations-procedural-sky-314028)について質問が来ました。
「コレが、![スクリーンショット 2025-05-19 223152.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/552b09be-468f-4c9d-ab65-66d4b2404705.png)
うちだとこうなるんですけど」
![スクリーンショット 2025-05-19 223013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/da624cb3-7a57-4087-a91c-60e5e01e2889.png)

どうやら欧州などでは **1.2** を **1,2** と表記する地域があり、
~~StringReader を使用して.csvファイルを読み込むと、~~ float.TryParse()で　1.2 -> 12 のように変換されてしまうみたいなんですね。

**.CSVデータ**
```dummyData.csv
//name,value1,value2
data1,12,34
data2,1.2,3.4
data3,"1,2","3,4"
```

<details><summary>float.TryParse()サンプル</summary>

```DecimapPointRegionTest.cs
using System.IO;
using System.Text.RegularExpressions;
using UnityEngine;
namespace DecimalPointRegionDemo
{
    public class DecimapPointRegionTest : MonoBehaviour
    {
        [SerializeField] TextAsset m_csvFile;

        // Start is called once before the first execution of Update after the MonoBehaviour is created
        void Start()
        {
            Debug.Log("----- Current culture -----");
            OnReadCsvFile(m_csvFile);
            Debug.Log("----- Spanish culture -----");
            System.Globalization.CultureInfo.CurrentCulture = new System.Globalization.CultureInfo("es-ES");
            OnReadCsvFile(m_csvFile);
            Debug.Log("----- InvariantCulture -----");
            System.Globalization.CultureInfo.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
            OnReadCsvFile(m_csvFile);
        }

        // Update is called once per frame
        void Update()
        {

        }

        void OnReadCsvFile(TextAsset _csvFile)
        {
            Regex reg = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
            StringReader reader = new StringReader(_csvFile.text);
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                string[] values = reg.Split(line); // ""で囲まれたものは分割しない
                if (values[0].StartsWith("//")) continue; // Skip comment line
                // Assuming the first column is a string and the second column is a float
                string name = values[0].Trim('"');
                if (float.TryParse(values[1].Trim('"'), out float value1))
                    if (float.TryParse(values[2].Trim('"'), out float value2))
                        Debug.Log($"Name: {name}, Value1: {value1}, Value2: {value2}");
            }
        }
    }
}

```
</details>

**結果**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/b478f2fb-95c2-4661-8b84-7a3193ed962f.png)

CultureInfoがスペインの時は
1.1 -> 11
1,1 -> 1.1 (表記上は1,1)
になっていますね。
```System.Globalization.CultureInfo.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;```
を宣言しておくことで、この問題を回避することができました。

![スクリーンショット 2025-05-19 235034.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/2318422e-ad8f-425c-af29-7f52deed5067.png)