NSDecimalNumber(string: ".") Возвращает 0 (ноль). Зачем?

Это Swift 3, Xcode 8.1
я ожидал nan,

Это будет ошибка?

Проиллюстрировать:

Детская площадка

Любые идеи о том, как обращаться с "."?
Я хотел бы избежать таких вещей, как:

if string == "." { ... }

guard string =! "." { ... }

1 ответ

Решение

0 является допустимым входом.

0. является действительным вводом`.

.0 является допустимым входом.

Не удивительно, что . также допустимый вход. Странно, но не удивительно, и ценность четко определена.

Обратите внимание, что это допустимо, только если символ соответствует текущей локали, например, . будет работать с английским языком, но не с немецким языком и наоборот:

Decimal(string: ".", locale: Locale(identifier: "de")) // NaN
Decimal(string: ",", locale: Locale(identifier: "de")) // Optional(0)

Короче говоря, как начальные, так и конечные нули могут быть опущены.

Если вы хотите обработать это значение, я рекомендую использовать регулярные выражения. Решите, какие форматы являются допустимыми, напишите регулярное выражение для этих форматов и проверьте строку с этим регулярным выражением.

Другие вопросы по тегам