2016-11-11 4 views
1

Это Swift 3, Xcode 8.1
Я ожидал nan.NSDecimalNumber (строка: ".") Возвращает 0 (ноль). Зачем?

Будет ли это ошибкой?

Для иллюстрации:

Playground

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

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

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

Это скорее функция, чем ошибка. (почему) вы хотите явно исключить «.». как действительный вход? – luk2302

+1

Любопытно - что происходит с 'NSDecimalNumber (строка:", ")' (с использованием запятой), если локали этого устройства установлены в локаль, которая использует запятую в качестве десятичного разделителя. – rmaddy

+0

@rmaddy Этот символ должен соответствовать десятичному разделителю locale 'Decimal (строка:". ", Locale: Locale (идентификатор:" de "))' будет возвращать 'NaN'. – Sulthan

ответ

2

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

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

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

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

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

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

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

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

+1

Я не согласен. Вы могли написать свой ответ так: '5' действительно. '5.' является действительным. '.5'. Это не делает '.' действительным и не делает его' 0'. – rmaddy

+0

@rmaddy Мое рассуждение состоит в том, что ведущие или конечные нули можно опустить. Это странно, но я не считаю это ошибкой. – Sulthan

+0

Другая вещь, которая выглядит странно для меня: 'nan' также возвращается для', '(ожидается) (только что обновил мой пример игровой площадки). Следуя тому, что вы описали, не должен ли он также возвращать '0'? –

Смежные вопросы