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

Что означает "M" в десятичном значении?

MSDN говорит:

"Без суффикса m число рассматривается как double, что порождает ошибку компилятора."

Что означает "М" в:

decimal current = 10.99M;

обозначить?

Является ли это чем-то иным, чем:

decimal current = (decimal)10.99
4b9b3361

Ответ 1

M делает число десятичным представлением в коде.

Чтобы ответить на вторую часть вашего вопроса, да, они разные.

decimal current = (decimal)10.99

совпадает с

double tmp = 10.99;
decimal current = (decimal)tmp;

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


Обновление

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


Обновление 2:

Я был прав в конце концов!, тебе все равно нужно быть осторожным. Сравните выходные данные этих двух функций.

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Test1());
        Console.WriteLine(Test2());
        Console.ReadLine();
    }

    static decimal Test1()
    {
        return 10.999999999999999999999M;
    }
    static decimal Test2()
    {
        return (decimal)10.999999999999999999999;
    }
}

Первый возвращает 10.999999999999999999999, но seccond возвращает 11


Так же, как примечание стороны, double даст вам 15 десятичных цифр точности, но десятичный будет вам 96 бит точности с коэффициентом масштабирования от 0 до 28. Таким образом, вы можете представить любое число в диапазоне ((-2 96 до 2 96)/10 (от 0 до 28))

Ответ 2

Описание

decimal current = 10.99M; 

Сообщает компилятору, что вы хотите десятичное число.

decimal current = (decimal)10.99

Сообщает компилятору, что вы хотите перевести double 10.99 в десятичное число.

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

Десятичный суффикс M/m, поскольку D/d уже был принят двойным. Хотя было высказано предположение, что M означает деньги, Питер Голде вспоминает, что M был выбран просто как следующая лучшая буква в десятичной форме.

Десятичная цифра имеет более значимые цифры, чем двойной, поэтому она может быть более точной - она ​​также занимает немного больше памяти. Помимо алгоритмов, связанных с математикой или физикой, двойной или float должен делать все правильно.

Например

  • Если вы сделаете ANYNUMBER/0.5d, вы не получите половину ANYNUMBER.
  • Если вы сделаете ANYNUMBER/0.5m, вы получите каждый раз половину ANYNUMBER.

  • Используйте decimal за деньги

  • Использовать double для курсов обмена

Дополнительная информация

Ответ 3

Ну... Я думаю, что "D" будет путать с double, поэтому... они выбрали "M"? Может быть, для "Денег"? Кажется немного глупым... но я не мог найти ничего окончательного.