2017-06-03 68 views
0

我正在使用Swift的Decimal類型,試圖確保用戶輸入的String是有效的Decimal爲什麼Swift Decimal從包含字母的字符串中返回數字?

我有兩個String值,每個包括一個字母,在我的Playground文件中。其中一個值在開始時包含一個字母,而另一個在結尾處包含一個字母。我使用每個值初始化一個Decimal,並且只有一個Decimal初始化失敗;使用包含開頭字母的值初始化Decimal

爲什麼Decimal使用最後包含字母的值進行初始化會返回有效的Decimal?我希望返回nil

附件是我的Playground文件的屏幕截圖。

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' ... –

相關問題