2017-06-03 5 views
0

私はSwiftのDecimalタイプを使用しており、ユーザーが入力したStringが有効なDecimalであることを確認しようとしています。文字を含む文字列からスウィフト10進数を返す理由は何ですか?

私は、Playgroundファイル内に文字を含む2つの値を持っています。一方の値には最初に文字が含まれ、他方には最後に文字が含まれています。各値を使用してDecimalを初期化し、Decimal初期化に失敗します。 Decimalは最初に文字を含む値で初期化されます。

Decimalの末尾にアルファベットを含む値で初期化すると、有効なDecimalが返されるのはなぜですか? nilが返されます。

添付ファイルは私のプレイグラウンドファイルのスクリーンショットです。

Screenshot of code that produces a valid Decimal from a String with a trailing letter

答えて

2

Decimalは、文字の前に任意の数の値を受け入れるためには、このように動作します。文字はそれの後に来る任意の数字の終止符として機能します。だからあなたの例では:

12a = 12 (a is the terminator in position 3) 
a12 = nil (a is the terminator in position 1) 

文字列は、あなたが代わりにFloatを使用することができ、文字が含まれている場合、両方が無効になりたい場合は。

+0

実際に注意するべき唯一の例外は、科学記法を使用する場合です。 'e +'は数字を終了しません。例えば、( '12.21e + 03')は' 12210'に四捨五入される有効な文字列になります... –

関連する問題