Это работает с текущей версией 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
}
})
}
Другой альтернативой является проверка дробной части:
x%%1==0
или, если вы хотите проверить с определенным допуском:
min(abs(c(x%%1, x%%1-1))) < tol
Однажды может также использовать dplyr::near
:
library(dplyr)
near(a, as.integer(a))
Это относится к любому вектору a
и имеет дополнительный параметр допуска.
Похоже, вы не видите необходимости включать некоторую устойчивость к ошибкам. В этом не было бы необходимости, если бы все целые числа вводились как целые числа, однако иногда они появляются в результате арифметических операций, которые теряют некоторую точность. Например:
> 2/49*49
[1] 2
> check.integer(2/49*49)
[1] FALSE
> is.wholenumber(2/49*49)
[1] TRUE
Обратите внимание, что это не слабость R, все компьютерные программы имеют некоторые пределы точности.
Я не уверен, чего вы пытаетесь достичь. Но вот некоторые мысли:
1. Преобразовать в целое число:
число = as.integer (123.2342)
2. Проверьте, является ли переменная целым числом:
is.integer (число)
typeof (num) == "integer"
Читая документацию по языку 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
Таким образом, в зависимости от вашего приложения у вас могут возникнуть проблемы.