これはSwift 3、Xcode 8.1
私はnan
を期待していました。NSDecimalNumber(文字列: "。")は0(ゼロ)を返します。どうして?
これはバグですか?
説明するために:
を処理する方法上の任意のアイデア ""?私はのようなものを避けるしたいと思い
:
if string == "." { ... }
guard string =! "." { ... }
これはSwift 3、Xcode 8.1
私はnan
を期待していました。NSDecimalNumber(文字列: "。")は0(ゼロ)を返します。どうして?
これはバグですか?
説明するために:
を処理する方法上の任意のアイデア ""?私はのようなものを避けるしたいと思い
:
if string == "." { ... }
guard string =! "." { ... }
0
は有効な入力です。
0.
は有効な入力です。
.0
は有効な入力です。
.
も有効な入力であることは驚きではありません。奇妙ではありますが、驚くべきことではありません。
これは、文字が現在のロケールと一致する場合にのみ有効です。 .
は英語ロケールで動作しますが、ドイツ語のロケールおよびその逆ではない。要するに
Decimal(string: ".", locale: Locale(identifier: "de")) // NaN
Decimal(string: ",", locale: Locale(identifier: "de")) // Optional(0)
、両方の先頭と末尾のゼロを省略することができます。
この値を処理したい場合は、正規表現を使用することをおすすめします。どのフォーマットが有効であるかを決め、そのフォーマットの正規表現を書いて、その正規表現で文字列をチェックします。
これはバグよりも多くの機能です。 (なぜ)明示的に除外したいのですか?有効な入力として? – luk2302
好奇心 - デバイスのロケールがカンマを小数点として使用するロケールに設定されている場合、 'NSDecimalNumber(string:"、 ")'(コンマを使用)で何が起こるか。 – rmaddy
@rmaddyその文字は、ロケールの小数点の区切り文字 'Decimal(文字列:"。 "、ロケール:ロケール(識別子:" de "))' NaNを返します。 – Sulthan