Проверьте, является ли число integer

Это работает с текущей версией 5:

override func viewDidLoad() {
        super.viewDidLoad()
        handle = Auth.auth().addStateDidChangeListener({ (auth, user) in
            if user == nil {

                if let authUI = FUIAuth.defaultAuthUI() {
                    authUI.delegate = self

                    let providers: [FUIAuthProvider] = [
                        FUIEmailAuth(),
                    ]
                    authUI.providers = providers

                    let provider = authUI.providers.first as! FUIEmailAuth;
                    provider.signIn(withPresenting: self, email: nil);
                }
            }
            else{
                self.userLbl.text = user?.displayName
            }
        })
    }
91
задан zx8754 26 May 2016 в 12:12
поделиться

5 ответов

Другой альтернативой является проверка дробной части:

x%%1==0

или, если вы хотите проверить с определенным допуском:

min(abs(c(x%%1, x%%1-1))) < tol
111
ответ дан 24 November 2019 в 06:47
поделиться

Однажды может также использовать dplyr::near:

library(dplyr)

near(a, as.integer(a))

Это относится к любому вектору a и имеет дополнительный параметр допуска.

0
ответ дан 24 November 2019 в 06:47
поделиться

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

> 2/49*49
[1] 2
> check.integer(2/49*49)
[1] FALSE 
> is.wholenumber(2/49*49)
[1] TRUE

Обратите внимание, что это не слабость R, все компьютерные программы имеют некоторые пределы точности.

8
ответ дан 24 November 2019 в 06:47
поделиться

Я не уверен, чего вы пытаетесь достичь. Но вот некоторые мысли:
1. Преобразовать в целое число:
число = as.integer (123.2342)
2. Проверьте, является ли переменная целым числом:
is.integer (число)
typeof (num) == "integer"

-3
ответ дан 24 November 2019 в 06:47
поделиться

Читая документацию по языку R, as.integer имеет больше отношения к способу хранения числа, чем если бы оно практически эквивалентно целому числу. is.integer проверяет, объявлено ли число как целое. Вы можете объявить целое число, поставив после него L .

> is.integer(66L)
[1] TRUE
> is.integer(66)
[1] FALSE

Также такие функции, как round , возвращают объявленное целое число, что вы делаете с x == round (x) . Проблема с этим подходом заключается в том, что вы считаете практически целым числом. В этом примере для проверки эквивалентности используется меньшая точность.

> is.wholenumber(1+2^-50)
[1] TRUE
> check.integer(1+2^-50)
[1] FALSE

Таким образом, в зависимости от вашего приложения у вас могут возникнуть проблемы.

10
ответ дан 24 November 2019 в 06:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: