Для проекта я пытаюсь реализовать класс Bit
, который выполняет все обычные вещи, которые должен делать немного.
Конструктор должен иметь возможность принимать любые Number
и устанавливать внутреннее состояние Bit
на 0
, если задано значение 0
, иначе установить его на 1
.
Все работает для целочисленных входов, но когда я получаю float ... очевидно, 0.0
не равно 0
.
class Bit(value: Number) {
var value: Int = (value != 0).toInt() // I implemented Bool-to-Int myself
}
Теперь проблема:
println(Bit(0).value) // Prints 0
println(Bit(0f).value) // Prints 1
Я думал, что это какая-то ошибка аппроксимации, но когда я попытался print(0f != 0)
, я получил Operator '!=' cannot be applied to 'Float' and 'Int'
.Однако при сравнении чисел через конструктор проблем не возникало.
Я чувствую, что есть какая-то скрытая магия приведения типов, о которой я не знаю, поэтому мой вопрос в основном "почему это не ведет себя так, как задумано, и чтобыло бы элегантным способом заставить его вести себя, как задумано? "