Подтвердить что ты не робот

Приведите двойную переменную к десятичной

Это будет казаться глупым вопросом для некоторых, но мне нужно использовать double to decimal для использования в качестве валюты. Куда идет М?

decimal dtot = (decimal)(doubleTotal);
4b9b3361

Ответ 1

Вы используете только M для числового литерала, когда вы просто его используете:

decimal dtot = (decimal)doubleTotal;

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

Ответ 2

Вы можете использовать двойное число до десятичного знака, не требуя суффикса литерала M:

double dbl = 1.2345D;
decimal dec = (decimal) dbl;

Вы должны использовать M при объявлении нового десятичного значения:

decimal dec = 123.45M;

(Без M, 123.45 рассматривается как двойной и не компилируется.)

Ответ 3

использовать класс преобразования по умолчанию: Convert.ToDecimal(Double)

Ответ 4

Convert.ToDecimal(the double you are trying to convert);

Ответ 5

Ну, это старый вопрос, и я действительно использовал некоторые из ответов, показанных здесь. Тем не менее, в моем конкретном сценарии было возможно, что значение double, которое я хотел преобразовать в decimal, часто было больше, чем decimal.MaxValue. Поэтому вместо обработки исключений я написал этот метод расширения:

    public static decimal ToDecimal(this double @double) => 
        @double > (double) decimal.MaxValue ? decimal.MaxValue : (decimal) @double;

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