在C#MSCorLib中没有运算符的乘法?

时间:2014-08-05 13:45:48

标签: c# mscorlib

我正在挖掘MSCoreLib,我发现了一些有趣的东西。

我很困惑这甚至是如何运作的。

(参考http://referencesource.microsoft.com/#mscorlib/system/math.cs第32行)

   // This table is required for the Round function which can specify the number of digits to round to
      private static double[] roundPower10Double = new double[] { 
          1E0, 1E1, 1E2, 1E3, 1E4, 1E5, 1E6, 1E7, 1E8,
          1E9, 1E10, 1E11, 1E12, 1E13, 1E14, 1E15
      };          

      public const double E  = 2.7182818284590452354;

看起来他们正在创建一个双数组。然后,为每个值乘以1 * E * nth。虽然他们没有使用任何运营商,但是出现了什么?

这是什么黑魔法?

3 个答案:

答案 0 :(得分:6)

不,你对这种符号感到困惑。

2e4 == 2E4 == 20000

仅表示2 * 10 ^ 4。 eE是“指数”的表示法。防止一个人写很多零是很有用的。第二个E与第一个double无关。第二个是标识符。但double Avogadro = 602300000000000000000000.0; 文字(以及一般文字)中不允许使用标识符。

示例

假设您希望存储Avogadro常数,那么您可以写:

double Avogadro = 6.023e23;

但它令人困惑(因为你需要计算零,一个人很容易犯错误)。然而,人们可以写道:

{{1}}

答案 1 :(得分:3)

这是E notation1E2表示1 * 10^2或更常见的xEy = x * 10^y。您也可以使用小写e

以下定义的public const double E = 2.7182818284590452354是无关的(但非常重要!)mathematical constant

答案 2 :(得分:2)

语法“1E3”只是表达1 * 10^3的简便方法。它只是一个编译技巧。注意,但是,这是编译时常量。你不能在那里使用变量。但是,您可以使用小数:2.57E4 = 25700。