現象
c# 在 parse 字符串數字時,會根據當前語言環境決定最終結果。Unity 應用也是如此。
例如下面這個例子,在德語環境下,最終的結果放大了 1000 倍。
類似的還有西班牙語,在這些語言中,小數點並不是中文或者英語裏的小數點,而是當作分隔符使用。
using System;
using System.Threading;
using System.Globalization;
namespace bible
{
class Program
{
static void Main(string[] args)
{
// 假設當前語言環境爲 de-DE
Console.WriteLine(float.Parse("0.123")); // 123
}
}
}
解決方法
將當前語言環境設置爲 CultureInfo.InvariantCulture。
using System;
using System.Threading;
using System.Globalization;
namespace bible
{
class Program
{
static void Main(string[] args)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
Console.WriteLine(float.Parse("0.123"));
}
}
}
或者在調用 float.Parse
時設置好語言環境。
using System;
using System.Threading;
using System.Globalization;
namespace bible
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(float.Parse("0.123", CultureInfo.InvariantCulture));
}
}
}