MSDN говорит:
"Без суффикса m число рассматривается как double, что порождает ошибку компилятора."
Что означает "М" в:
decimal current = 10.99M;
обозначить?
Является ли это чем-то иным, чем:
decimal current = (decimal)10.99
MSDN говорит:
"Без суффикса m число рассматривается как double, что порождает ошибку компилятора."
Что означает "М" в:
decimal current = 10.99M;
обозначить?
Является ли это чем-то иным, чем:
decimal current = (decimal)10.99
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))
decimal current = 10.99M;
Сообщает компилятору, что вы хотите десятичное число.
decimal current = (decimal)10.99
Сообщает компилятору, что вы хотите перевести double 10.99
в десятичное число.
Некоторые говорят, что это означает деньги. M, потому что вы должны использовать десятичные знаки в финансовых приложениях. Вы должны использовать десятичные числа, потому что они более точны, чем числа с плавающей запятой (double).
Десятичный суффикс M/m, поскольку D/d уже был принят двойным. Хотя было высказано предположение, что M означает деньги, Питер Голде вспоминает, что M был выбран просто как следующая лучшая буква в десятичной форме.
Десятичная цифра имеет более значимые цифры, чем двойной, поэтому она может быть более точной - она также занимает немного больше памяти. Помимо алгоритмов, связанных с математикой или физикой, двойной или float должен делать все правильно.
Например
Если вы сделаете ANYNUMBER/0.5m, вы получите каждый раз половину ANYNUMBER.
Используйте decimal
за деньги
double
для курсов обменаНу... Я думаю, что "D" будет путать с double
, поэтому... они выбрали "M"? Может быть, для "Денег"? Кажется немного глупым... но я не мог найти ничего окончательного.