Это будет казаться глупым вопросом для некоторых, но мне нужно использовать double to decimal для использования в качестве валюты. Куда идет М?
decimal dtot = (decimal)(doubleTotal);
Это будет казаться глупым вопросом для некоторых, но мне нужно использовать double to decimal для использования в качестве валюты. Куда идет М?
decimal dtot = (decimal)(doubleTotal);
Вы используете только M
для числового литерала, когда вы просто его используете:
decimal dtot = (decimal)doubleTotal;
Обратите внимание, что число с плавающей запятой не подходит для сохранения точного значения, поэтому, если вы сначала добавляете числа вместе, а затем конвертируете в Decimal
, вы можете получить ошибки округления. Вы можете преобразовать числа в Decimal
, прежде чем добавлять их вместе, или убедиться, что числа не являются номерами с плавающей запятой в первую очередь.
Вы можете использовать двойное число до десятичного знака, не требуя суффикса литерала M
:
double dbl = 1.2345D;
decimal dec = (decimal) dbl;
Вы должны использовать M
при объявлении нового десятичного значения:
decimal dec = 123.45M;
(Без M
, 123.45 рассматривается как двойной и не компилируется.)
использовать класс преобразования по умолчанию: Convert.ToDecimal(Double)
Convert.ToDecimal(the double you are trying to convert);
Ну, это старый вопрос, и я действительно использовал некоторые из ответов, показанных здесь. Тем не менее, в моем конкретном сценарии было возможно, что значение double
, которое я хотел преобразовать в decimal
, часто было больше, чем decimal.MaxValue
. Поэтому вместо обработки исключений я написал этот метод расширения:
public static decimal ToDecimal(this double @double) =>
@double > (double) decimal.MaxValue ? decimal.MaxValue : (decimal) @double;
Вышеупомянутый подход работает, если вы не хотите беспокоиться об обработке исключений переполнения, и если такое случается, вы хотите просто сохранить максимально возможное значение (мой случай), но я знаю, что для многих других сценариев это не будет ожидаемое поведение и может быть обработка исключений будет необходимо.