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
。这就是似乎正在发生的事情,但他们没有使用任何运营商?
这是什么黑魔法?
不,你被符号弄糊涂了。
2e4 == 2E4 == 20000
表示2 * 10^4。e
或E
是"指数"的符号。防止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。