десятичные дроби, целые числа, кастинг ... о боже! - PullRequest
3 голосов
/ 11 апреля 2009

Я просматриваю книгу «Head First C #» и в одной из глав я создал программу и использую переменные, объявленные как целые и десятичные числа. Visual Studio несколько раз сошла со мной по поводу смешивания и сопоставления двух. Например:

dinnerParty.NumberOfPeople = (int) numericUpDown1.Value;

NumberOfPeople объявлено как int, и, по-видимому, числовые обновления являются десятичными.

Кроме того, книга ставит М после нескольких чисел при сложении их вместе. Например:

public void SetHealthyOption(bool healthy)
{
    if (healthy)
    {
        CostOfBeveragesPerPerson = 5.00M;
    }
    else
    {
        CostOfBeveragesPerPerson = 20.00M;
    }
}

CostOfBeveragesPerPerson объявлен как десятичное число.

Итак, у меня есть два конкретных вопроса:

1) Как узнать, когда нужно что-то разыграть? Я уверен, что в кастинге есть немало ... кто-нибудь может дать хорошие ссылки, чтобы узнать о кастинге?

2) Что делает М после чисел?

EDIT

Таким образом, М обозначает, что число является десятичным, а не двойным. Почему бы просто не преобразовать число в десятичное, например: (десятичное) 50,00? И как называется эта «функция»? Если бы я хотел посмотреть, какие "буквы" были доступны, что бы я гуглил?

Ответы [ 3 ]

6 голосов
/ 11 апреля 2009
  1. Явное приведение обычно требуется, когда между двумя типами есть потеря точности. Например, если у вас есть int и вы присвоили ему long, преобразование не требуется, поскольку long может содержать все значения, которые может использовать int. Однако, если вы присваиваете длинное значение int, то требуется преобразование, поскольку int может содержать меньше значений, чем long, что может привести к потере данных.
  2. M определяет число как десятичный тип. Если вы пропустите это, число будет интерпретировано как двойной.
3 голосов
/ 11 апреля 2009
Type    Suffix          Example
uint    U or u          100U
long    L or l          100L
ulong   UL or ul        100UL
float   F or f          123.45F
decimal M or m          123.45M

На многих страницах объясняются числовые литералы C #. Буква в конце не является приведением или какой-либо другой функцией. Это синтаксис, показывающий, что то, что вы пишете, представляет собой значение определенного типа. Таким образом, запись (десятичная) 5.0 использует приведение, а запись 5.0m - нет.

2 голосов
/ 11 апреля 2009
  1. Вот хорошая ссылка на кастинг прямо из MSDN.
  2. M сообщает компилятору, что число является decimal, в противном случае оно будет считать double
...