c# MSCorLib中不带操作符的乘法

本文关键字:操作符 MSCorLib | 更新日期: 2023-09-27 18:16:33

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

我很困惑这是如何工作的。

(ref http://referencesource.microsoft.com/#mscorlib/system/math.cs line 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。这就是似乎正在发生的事情,但他们没有使用任何运营商?

这是什么黑魔法?

c# MSCorLib中不带操作符的乘法

不,你被符号弄糊涂了。

2e4 == 2E4 == 20000

表示2 * 10^4。eE是"指数"的符号。防止1写很多0是很有用的。第二种E与第一种没有关系。第二个是标识符。但是在double字面值中不允许使用标识符(以及一般的字面值)。

:

如果你希望存储阿伏伽德罗常数,那么你可以写:

double Avogadro = 602300000000000000000000.0;

但是它令人困惑(因为你需要数0,一个人很容易犯错误)。但是可以这样写:

double Avogadro = 6.023e23;

这是E符号。1E2表示1 * 10^2,或者更一般的xEy = x * 10^y。您也可以使用小写的e

下面定义的public const double E = 2.7182818284590452354是一个不相关(但非常重要!)的数学常数。

语法"1E3"只是表示1 * 10^3的一种简写方式。这只是一个编译器的技巧。但是请注意,这是一个编译时常量。你不能在这里使用变量。但是,您可以使用小数:2.57E4 = 25700。