Kel*_*sey 22

使用Decimal.Multiply将强制乘法来获取类型的输入decimal而不是正在使用和转换的类型decimal.

Decimal.Multiply(decimal d1, decimal d2)并将强制执行和输出类型decimal.当作为*你可以这样做:

decimal result = yourDecimal * yourInt; 
Run Code Online (Sandbox Code Playgroud)

这允许您在某些情况下混合和匹配类型,它将为您处理所有类型,但根据右侧的定义方式,类型不保证为十进制.


Chr*_*rle 11

*操作符被重载并调用Multiply内部.这只是一个可读性的问题.

  • @mgronber - 这不是使用`Multiply`的理由,这是理解整数溢出,使用正确的操作类型和类型转换/提升的理由.如果你发现有人在这种情况下使用"Multiply",那么正确的做法就是让他们坐下来讨论数字表示并选择(强制转换)正确的类型.严格来说,这个问题的措辞方式,这也不是一个真正的答案 - 至少对我而言,因为`100*200`更具可读性,尽管我写的是'100m*200m`以与之相符类型. (2认同)

mgr*_*ber 9

*操作符被重载十进制类型和它是相同的Decimal.Multiply().但是,重载*运算符要求至少有一个参数是十进制的.否则,*调用其他一些运算符.在decimal result = 100 * 200int类型中首先相乘,然后转换为十进制.如果乘法结果大于Int32.MaxValue,则会出现溢出.

decimal d1 = 2147483647 * 2; // Overflow
decimal d2 = 2147483647m * 2; // OK
decimal d3 = Decimal.Multiply(2147483647, 2); // OK
Run Code Online (Sandbox Code Playgroud)