Я думаю, что ваш вопрос основан на ошибочном предположении. Совершенно безопасно сравнивать значения с плавающей запятой, используя == в .Net. Единственное странное поведение, связанное с ==
и значениями с плавающей запятой, заключается в том, что Double.NaN
и Single.NaN
по сравнению с самими собой с ==
вернут false
(как диктуется спецификацией с плавающей запятой).
Использование Math.Floor
не делает эту ситуацию лучше. Если любое из специальных значений с плавающей запятой (NaN
, NegativeInfinity
, PositiveInfinity
) передается в Math.Floor
, они возвращаются без изменений. Таким образом, сравнение через ==
все равно будет иметь странное поведение ( Reference )
Основной эффект при использовании Math.Floor
будет иметь большее число плавающих значений будут сравниваться равными друг другу. Например, 7.1
и 7.5
будут равны после Math.Floor
. По сути, это не лучше, но может быть в контексте вашего приложения, но трудно сказать, что будет без дополнительной информации. Не могли бы вы рассказать подробнее о том, почему вы думаете ==
небезопасно?