Для сравнения double и decimal следует ли использовать double to decimal или decimal в double?

Мне нужно сравнить два значения. Одно значение price, которое представляет текущую цену чего-то и поэтому decimal, потому что вы действительно можете купить или продать что-то по этой цене.

Другое значение estimatedPrice, которое является результатом математических вычислений, и поэтому double, потому что это просто estimation, и вы не можете фактически выполнять какие-либо "операции" с помощью этого esitmatedPrice

теперь я хочу купить, если price < estimatedPrice.

Так что я должен лить цену в double или valuPrice на десятичную?

Я понимаю, что после кастинга я получу "незначительные другие" цифры, но, похоже, у меня нет других вариантов.

Ответ 1

Это зависит от данных. Десятичная имеет большую точность; double имеет больший диапазон. Если double может находиться за пределами десятичного диапазона, вы должны отдать десятичное значение в double (или вы можете написать метод, который возвращает результат без кастинга, если двойное значение находится за пределами десятичного диапазона, см. Пример ниже).

В этом случае кажется маловероятным, что двойное значение будет находиться за пределами десятичного диапазона, поэтому (особенно, поскольку вы работаете с данными о ценах) вы должны использовать double для десятичного числа.

Пример (можно использовать некоторую логику для обработки значений NaN):

private static int Compare(double d, decimal m)
{
    const double decimalMin = (double)decimal.MinValue;
    const double decimalMax = (double)decimal.MaxValue;
    if (d < decimalMin) return -1;
    if (d > decimalMax) return 1;
    return ((decimal)d).CompareTo(m);
}

Ответ 3

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

Ответ 4

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

Точно так же, по вашей расчетной цене, можете ли вы иметь дело с цифрами, которые (скажем) в 100 раз больше?