Help us understand the problem. What is going on with this article?

小数点がドットじゃなくてカンマになってしまう場合の対応

More than 1 year has passed since last update.

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));

このコードを、端末の言語設定がフランス語の場合で試した結果、コンソールでは下の画像のように出力されます。
(一部の出力は隠しています。)

qiita_image_20181107.png

参考

koji-oura
普段は、Android/iOSアプリ、サーバーサイドの開発しています。
ayudante
いつもユーザー中心で技術者とコンサルタントがとことん考え抜く それがアユダンテです
https://ayudante.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした