2

小数点に関するヨーロッパの慣例では、ピリオド (.) の代わりにコンマ (,) を使用しているようです。これは、浮動小数点が (自動的に) 「3,1415...」と表示される可能性があることを意味しますか? EU およびこれが慣習となっている他の国では?

つまり... を呼び出した場合Float.toString(motionEvent.getX())、215.35 ではなく 215,35 (画面の中央のどこか) を取得する可能性があります。

4

2 に答える 2

3

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

于 2012-10-05T18:30:09.357 に答える
0

この問題は「ロケール」です (float 自体の値ではなく、float のテキスト表現がどのように出力されるかという問題です)。

はい、私の知る限り、ヨーロッパのロケールは「。」の代わりに「、」をサポートしています:

よくある間違いは、機械可読な出力を生成するときに暗黙的にデフォルトのロケールを使用することです。これは、開発者のテスト デバイスでは機能する傾向がありますが (特に、非常に多くの開発者が en_US を使用しているため)、ユーザーがより複雑なロケールにいるデバイスで実行すると失敗します。

たとえば、整数をフォーマットする場合、一部のロケールでは非 ASCII 10 進数が使用されます。別の例として、浮動小数点数をフォーマットする場合、一部のロケールでは小数点として「,」を使用し、「.」を使用します。桁のグループ化用。これは、人間が判読できる出力では正しいですが、別のコンピューターに提示すると問題が発生する可能性があります (たとえば、parseDouble(String) はそのような数値を解析できません)。Locale を取らない toLowerCase() および toUpperCase() のオーバーロードにも注意する必要があります。

補遺:

つまり、一部の API はロケールを認識し、他の API はそうではありません。厄介な副作用として、あるロケール用に構成されたハンドセットでは一部のコードが正しく動作しているように見えても、別のロケール用に構成されたハンドセットでは失敗する (またはクラッシュする!) 場合があります。

秘訣は、この問題を認識し、どの API がロケールに対応していて、どの API が対応していないかを理解することです。

問題の例「Float.toString()」はそうではありません

于 2012-10-05T18:30:41.240 に答える