2018/11/09更新 : 実行環境、タグを追記しました。
実行環境
- Mac OS X 10.13.6
- Visual Studio for Mac 7.6.7
- Xamarin.iOS 12.0.0.15
- Xcode 10.1
きっかけ
普段Visual Studio for Mac(Xamarin.iOS)にてiOSアプリ開発を行なっているのですが、その時に発生した不具合についての備忘録です。
小数点の数値を文字列に変換する場合、小数点がドットではなく、カンマになってしまう場合がある。
URLのクエリに利用する文字列の場合、ドットにしないとエラーになって値を取得できないということがあったので調査。
原因
端末の言語設定が、ある地域の言語(ヨーロッパ圏言語等)の言語の場合、小数点をカンマで表現する様子
対応
小数点を含む数値を文字列に変換する時は、英語圏(en-US等)の書式を指定すると、小数点は常にドットで文字列化される。
実際の使用例は下記の通り
using System.Globalization;
/* 省略 */
// 文字列化したいdouble型
double val = 1.12345;
// 端末依存のCultureInfoで文字列出力した場合
// 文字列から数値に戻せるように書式指定子にR(ラウンドトリップ書式指定子)を指定
Debug.WriteLine ("Before: " + val.ToString("R"));
// CultureInfo.InvariantCultureでen-USの書式を取得
CultureInfo culture = CultureInfo.InvariantCulture;
// 数値文字列のフォーマットを取得
NumberFormatInfo format = culture.NumberFormat;
// CultureInfo.InvariantCultureのNumberFormatInfoを指定して出力
Debug.WriteLine ("After: " + val.ToString ("R", format));
このコードを、端末の言語設定がフランス語の場合で試した結果、コンソールでは下の画像のように出力されます。
(一部の出力は隠しています。)