做個筆記
隨手看到其他開發者轉推的文章,提及到 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