我正在挖掘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
。虽然他们没有使用任何运营商,但是出现了什么?
这是什么黑魔法?
答案 0 :(得分:6)
不,你对这种符号感到困惑。
2e4 == 2E4 == 20000
仅表示2 * 10 ^ 4。 e
或E
是“指数”的表示法。防止一个人写很多零是很有用的。第二个E
与第一个double
无关。第二个是标识符。但double Avogadro = 602300000000000000000000.0;
文字(以及一般文字)中不允许使用标识符。
示例强>:
假设您希望存储Avogadro常数,那么您可以写:
double Avogadro = 6.023e23;
但它令人困惑(因为你需要计算零,一个人很容易犯错误)。然而,人们可以写道:
{{1}}
答案 1 :(得分:3)
这是E notation。 1E2
表示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。