小数点に関するヨーロッパの慣例では、ピリオド (.) の代わりにコンマ (,) を使用しているようです。これは、浮動小数点が (自動的に) 「3,1415...」と表示される可能性があることを意味しますか? EU およびこれが慣習となっている他の国では?
つまり... を呼び出した場合Float.toString(motionEvent.getX())
、215.35 ではなく 215,35 (画面の中央のどこか) を取得する可能性があります。
小数点に関するヨーロッパの慣例では、ピリオド (.) の代わりにコンマ (,) を使用しているようです。これは、浮動小数点が (自動的に) 「3,1415...」と表示される可能性があることを意味しますか? EU およびこれが慣習となっている他の国では?
つまり... を呼び出した場合Float.toString(motionEvent.getX())
、215.35 ではなく 215,35 (画面の中央のどこか) を取得する可能性があります。
Float.toString()
いいえ、文化を使用しません - 形式は固定されています。以下を含む詳細については、ドキュメントを参照してください。
m が 10-3 未満または 107 以上の場合、いわゆる「コンピュータ化された科学的表記法」で表されます。n を 10n ≤ m < 10n+1 となる一意の整数とします。次に、a を m と 10n の数学的に正確な商とし、1 ≤ a < 10 とします。大きさは、a の整数部分として、単一の 10 進数として表され、その後に「.」が続きます。('\u002E')、その後に a の小数部分を表す 10 進数、その後に文字 'E' ('\u0045') が続き、その後に Integer メソッドによって生成される 10 進整数としての n の表現が続きます。 toString(int)。m または a の小数部分は何桁で表示する必要がありますか? 小数部を表すには少なくとも 1 桁が必要で、それ以上は m
ヨーロッパのロケールのデフォルト設定などを使用する場合は、コンマを使用します。DecimalFormat
この問題は「ロケール」です (float 自体の値ではなく、float のテキスト表現がどのように出力されるかという問題です)。
はい、私の知る限り、ヨーロッパのロケールは「。」の代わりに「、」をサポートしています:
よくある間違いは、機械可読な出力を生成するときに暗黙的にデフォルトのロケールを使用することです。これは、開発者のテスト デバイスでは機能する傾向がありますが (特に、非常に多くの開発者が en_US を使用しているため)、ユーザーがより複雑なロケールにいるデバイスで実行すると失敗します。
たとえば、整数をフォーマットする場合、一部のロケールでは非 ASCII 10 進数が使用されます。別の例として、浮動小数点数をフォーマットする場合、一部のロケールでは小数点として「,」を使用し、「.」を使用します。桁のグループ化用。これは、人間が判読できる出力では正しいですが、別のコンピューターに提示すると問題が発生する可能性があります (たとえば、parseDouble(String) はそのような数値を解析できません)。Locale を取らない toLowerCase() および toUpperCase() のオーバーロードにも注意する必要があります。
補遺:
つまり、一部の API はロケールを認識し、他の API はそうではありません。厄介な副作用として、あるロケール用に構成されたハンドセットでは一部のコードが正しく動作しているように見えても、別のロケール用に構成されたハンドセットでは失敗する (またはクラッシュする!) 場合があります。
秘訣は、この問題を認識し、どの API がロケールに対応していて、どの API が対応していないかを理解することです。
問題の例「Float.toString()」はそうではありません。