哪种数值类型转换更适合简单的数学运算?

Mag*_*agB 8 c# precision numeric type-conversion

我想知道哪种转换对于简单的数学运算更好(关于性能/速度和精度/最少损失)以及它们的不同之处是什么?

例:

double double1 = integer1 / (5 * integer2);
var double2 = integer1 / (5.0 * integer2);
var double3 = integer1 / (5D * integer2);
var double4 = (double) integer1 / (5 * integer2);
var double5 = integer1 / (double) (5 * integer2);
var double6 = integer1 / ((double) 5 * integer2);
var double7 = integer1 / (5 * (double) integer2);
var double8 = Convert.ToDouble(integer1 / (5 * integer2));
var double9 = integer1 / Convert.ToDouble(5 * integer2);
Run Code Online (Sandbox Code Playgroud)

实际上我的问题是关于转换而不是类型本身.

Mat*_*son 5

编辑

回答你完全改变的问题:

第一行double double1 = integer1 / (5 * integer2);是整数除法,所以不要这样做.

此行在var double8 = Convert.ToDouble(integer1 / (5 * integer2));将结果转换为double之前进行整数除法,因此也不要这样做.

除此之外,您列出的所有不同方法最终将为Conv.R8示例代码中的每一行调用一次IL指令.

唯一真正的区别是Convert.ToDouble()会调用方法,所以你应该避免这样做.

除了double1double8将是相同的每一行的结果.

所以你应该选择最简单的方法: var double2 = integer1 / (5.0 * integer2);

在更复杂的情况下,请花时间查看是否存在任何差异.

  • @MagB它没有任何区别 - 就像我说的那样,你列出的所有转换最终都会调用`Conv.R8`(并且它只对你的示例代码的每一行调用一次).在更复杂的情况下,请花时间查看代码是否有所不同. (2认同)