Сравнение десятичных знаков в соответствии с их масштабом - PullRequest
2 голосов
/ 21 марта 2012

У меня есть два десятичных знака для сравнения.Один приходит из таблицы БД, сопоставленной с NHibernate с precision=22 и scale = 8, давайте посмотрим примерное значение, как я вижу его в часах:

77.47234902

то, с чем я сравниваю это:

77.472349025229

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

РЕДАКТИРОВАТЬ Просто разрабатывая ответ @ V4Vendetta, я создал этот метод расширения:

    public static class ScaleComparer
    {
        public static bool ScaleEquals(this decimal lhs, decimal rhs, int scale)
        {
            decimal mult = (decimal)Math.Pow(10, scale);
            return decimal.Truncate(lhs * mult) / mult == decimal.Truncate(rhs*mult)/mult;
        }
    }

Это работает, но я действительно чувствую, что должно быть что-то умнее:)

1 Ответ

1 голос
/ 21 марта 2012

Может быть, вы могли бы попробовать эти строки (не уверен, что самый умный)

bool iscompared = decimal.Truncate(77.472349025229M * 100000000.0M) / 100000000.0M == 77.47234902M;

возврат true

...