Можно ли умножить десятичное число с 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: обновленный код (спасибо Джону)
Ответы
Ответ 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
для расчета.
Также вы никогда не сможете гарантировать точность с плавающей запятой, потому что есть числа, которые не могут быть представлены точно в двоичном формате. Вы должны принять другие меры предосторожности, чтобы минимизировать ошибки округления.