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

Можно ли умножить десятичное число с int?

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

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

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

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

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

int intVar = 3;

или вот так:

decimal intVar = 3;

?

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Соображения конверсии

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

Ответ 3

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

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