主題

【遊戲開發日誌 #14.1】C#字串轉換對應系統語系的不一性

サンエックス | 2022-05-08 19:19:01 | 巴幣 3410 | 人氣 142

做個筆記

隨手看到其他開發者轉推的文章,提及到 float、double 等格式在轉換成字串的過程中,於特定語系的系統下會產生不同的結果。

舉例來說,一般我們把浮點數轉字串會這樣:
0.5f.ToString(); // 得到 "0.5"

但在德法語區的系統下會得到 "0,5" 的結果,小數點由句號變成了逗號


還以為這種因語區導致的字串轉換差異只會出現在時間還有貨幣上,今天才知道竟然連小數的表示方法都會有文化差異,長知識了。

可好了,之前整改好的存讀檔系統在數值的讀寫上還沒做出相應措施,這本身還是個不容易去察覺的漏洞,幸好能及時處理。
在字串的轉換過程中加入CultureInfo.InvariantCulture」屬性,使其轉換結果能有地區不變的性質,
於不同語區的系統上得到相同的結果。

4.8763f.ToString(CultureInfo.InvariantCulture); // 一律為 "4.8763"

或是在程式起點加上這行,直接調整語系判讀的預設值。
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

希望也能幫到有需要的人,尤其是有打算將作品發佈至其他地區的開發者。


※ 參考
【C#】文字列 → float (浮動小数点) 変換でエラーが出るときは…
What does CultureInfo.InvariantCulture mean? - Stack Overflow
CultureInfo.InvariantCulture in .ToString() - Stack Overflow

創作回應

樂小呈
長姿勢
2022-05-08 19:36:22
サンエックス
暫停學姿勢
2022-05-08 23:17:20
黑夜騎兵哪有這麼可愛
Console.WriteLine("Hello World!");
2022-05-08 20:33:52
サンエックス
Console.WriteLine("Za Warudo!");
2022-05-08 23:18:34

相關創作

更多創作