我是C#和.NET的新手,所以如果这是一个太简单的问题,我就会大肆宣传。
我有一个十进制变量decVar
。
我需要将它与整数变量intVar
相乘。
我需要结果为decimal
。
那么我应该将整数变量声明为int
还是decimal
?
有了这段代码,
decimal decVar = 0.1m;
decimal decRes = decVar * intVar;
我应该这样声明:
int intVar = 3;
或者像这样:
decimal intVar = 3;
这是一项财务计算,因此我需要将结果正好0.3
。
更新:代码已更新(感谢Jon)
答案 0 :(得分:31)
没关系 - int
无论如何都会转换为decimal
:没有*(decimal, int)
运算符,只有*(int, int)
和*(decimal, decimal)
。 (当然还有其他类型。)
现在decimal
无法隐式转换为int
,但反向转换有效 - 这就是编译器的作用。
但是,您需要更改decVar
的声明,因为当前赋值运算符的右侧是double,而不是小数。你的意思是0.1米。你也想要半冒号:)
答案 1 :(得分:8)
它没有任何区别。由于乘法的一个参数是decimal
,另一个参数也将转换为decimal
(如果它不是一个)。
此转化为always safe:
转化注意事项
此类型提供了将Decimal值转换为和从中转换的方法 SByte,Int16,Int32,Int64,Byte,UInt16,UInt32和UInt64。 从这些整数类型到Decimal的转换正在扩大 从不丢失信息或抛出异常的转换。
答案 2 :(得分:1)
您是将其声明为int
还是decimal
并不重要。它会被转换为decimal
进行计算。
此外,您永远无法保证浮点精度,因为有些数字无法用二进制表示。您必须采取其他预防措施以尽量减少舍入误差。