decimal result = 100 * 200;
VS
decimal result = Decimal.Multiply(100, 200);
答案 0 :(得分:20)
使用Decimal.Multiply
将强制乘法输入decimal
类型的输入,而不是使用的任何类型并转换为decimal
。
Decimal.Multiply(decimal d1, decimal d2)
并强制执行并输出decimal
类型。你可以做*
的地方:
decimal result = yourDecimal * yourInt;
这允许您在某些情况下混合和匹配类型,它将为您处理所有类型,但根据右侧的定义方式,类型不保证为十进制。
答案 1 :(得分:11)
*
运算符已超载,并在内部调用Multiply
。这只是一个可读性问题。
答案 2 :(得分:9)
*
运算符为十进制类型重载,它与Decimal.Multiply()
相同。但是,重载的*
运算符要求至少有一个参数是十进制的。否则,将调用其他一些*
运算符。在decimal result = 100 * 200
中,首先将int类型相乘,然后转换为十进制。如果乘法结果大于Int32.MaxValue
,则会出现溢出。
decimal d1 = 2147483647 * 2; // Overflow
decimal d2 = 2147483647m * 2; // OK
decimal d3 = Decimal.Multiply(2147483647, 2); // OK
答案 3 :(得分:4)
某些语言不支持重载运算符;那些必须调用Multiply()方法。
答案 4 :(得分:1)
不需要.NET语言直接支持小数,但在这种语言中,您仍然可以使用System.Decimal结构。由于也不要求.NET语言支持运算符覆盖,因此需要使用这些方法以便在这种情况下完全使用。