可以将小数乘以int吗?

时间:2011-10-27 19:38:52

标签: c# .net int decimal type-conversion

我是C#和.NET的新手,所以如果这是一个太简单的问题,我就会大肆宣传。

我有一个十进制变量decVar。 我需要将它与整数变量intVar相乘。 我需要结果为decimal。 那么我应该将整数变量声明为int还是decimal

有了这段代码,

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

我应该这样声明:

int intVar = 3;

或者像这样:

decimal intVar = 3;

这是一项财务计算,因此我需要将结果正好0.3

更新:代码已更新(感谢Jon)

3 个答案:

答案 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进行计算。

此外,您永远无法保证浮点精度,因为有些数字无法用二进制表示。您必须采取其他预防措施以尽量减少舍入误差。