Можно ли умножать десятичную на целое? - PullRequest
20 голосов
/ 27 октября 2011

Я новичок в C # и .NET, поэтому прошу прощения, если это слишком простой вопрос.

У меня есть десятичная переменная decVar.Мне нужно умножить его на целочисленную переменную intVar.Мне нужен результат, чтобы быть decimal.Поэтому я должен объявить целочисленную переменную как int или decimal?

Имея этот код,

decimal decVar = 0.1m;
decimal decRes = decVar * intVar;

я должен объявить его следующим образом:

int intVar = 3;

или как это:

decimal intVar = 3;

?

Это финансовый расчет, поэтому мне нужно, чтобы результат был точно 0.3.

upd : Код обновлен (спасибо Джону)

Ответы [ 3 ]

32 голосов
/ 27 октября 2011

Неважно - int будет преобразован в decimal в любом случае: оператора *(decimal, int) нет, просто *(int, int) и *(decimal, decimal). (И другие типы, конечно.)

Теперь decimal не может быть неявно преобразовано в int, но обратное преобразование допустимо - вот что делает компилятор.

Однако вам нужно изменить объявление decVar, так как в настоящее время правая часть оператора присваивания является двойной, а не десятичной. Вы имеете в виду 0,1 м. Вам тоже понадобятся точки с запятой:)

8 голосов
/ 27 октября 2011

Это не имеет значения.Так как один аргумент умножения равен decimal, другой также будет преобразован в decimal (если он еще не один).

Это преобразование всегда безопасно :

Особенности преобразования

Этот тип предоставляет методы для преобразования десятичных значений в и из SByte, Int16, Int32, Int64, Byte, UInt16, UInt32 и UInt64,Преобразования из этих целочисленных типов в десятичные являются расширяющимися преобразованиями, которые никогда не теряют информацию и не генерируют исключения.

1 голос
/ 27 октября 2011

Неважно, объявите ли вы его как int или decimal. Он будет приведен к decimal для расчета.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...