Я не знаком с Python, но я пытаюсь ответить на вопрос, основываясь на том, что я знаю о CLR и C #.
В вашем примере значение с плавающей запятой «упаковано», когда оно присваивается свойству Value. Упаковка - это способ хранения типа значения (такого как float, int и т. Д.) В типизированной переменной. Если метод assert принимает два параметра объекта, он может выполнять равенство ссылок, и в этом случае они не будут «равны». Вам необходимо «распаковать» свойство Value, чтобы получить сравнение значений. В C # это делается простым приведением объектной переменной обратно к ее исходному типу.
Для демонстрации см. Следующий код. Обратите внимание, что он печатает False для первого и True для второго.
void Main()
{
object value1 = 1234.5F;
object value2 = 1234.5F;
Console.WriteLine(AreEqual(value1, value2));
Console.WriteLine(AreEqual((float)value1, (float)value2));
}
bool AreEqual(object value1, object value2) {
return value1 == value2;
}
bool AreEqual(float value1, float value2) {
return value1 == value2;
}
Однако я должен согласиться с Игнасио, что вам никогда не следует сравнивать два числа с плавающей запятой на равенство. Вы всегда должны использовать метод, который включает допуск, поскольку операции с плавающей запятой иногда могут привести к небольшим различиям.