Это допустимое сравнение чисел с плавающей запятой, учитывающее заданное количество десятичных знаков?

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

/// <summary>
/// Determines if the float value is equal to (==) the float parameter according to the defined precision.
/// </summary>
/// <param name="float1">The float1.</param>
/// <param name="float2">The float2.</param>
/// <param name="precision">The precision.  The number of digits after the decimal that will be considered when comparing.</param>
/// <returns></returns>
public static bool AlmostEquals(this float float1, float float2, int precision = 2)
{
    return (Math.Round(float1 - float2, precision) == 0);
}

Примечание: Я ищу сравнение десятичных знаков, а не допуска. Я не хочу, чтобы 1 000 000 равнялись 1 000 001.

9
задан Kim 7 February 2012 в 18:13
поделиться