C# .NET中用于物理和数学常量以及基本转换的库

5
我注意到在C#中,我们可以通过Math.PI获得PI的值。
您知道是否存在用于获取其他著名常数的四舍五入值的库或包,例如阿伏伽德罗常数,开尔文,普朗克,库仑,黄金比例,牛顿常数等吗?
如果能够进行简单的转换,那将非常好。
换句话说,这就像科学领域的轻量级moment.js,可以节省很多人的时间。

1
顺便说一下,Math.PI不是π。它是3.14159265358979323846 - Thomas Ayoub
1
为什么这个问题有这么多赞?它是一个非常低质量的问题,没有展示出任何研究努力。 - MakePeaceGreatAgain
你在使用Rahul的方法编写自己的类上到底遇到了什么问题呢?这样做意味着你会依赖外部资源,根据你所在的公司或组织的限制情况而定,这可能是一件好事。不管怎样,在Stack Overflow上寻找库和工具是离题的,所以这个问题可能会被关闭。 - MakePeaceGreatAgain
@Thomas(你的第一条评论)你引用的数字比double更接近真正的π。看起来Math.PI是一个等价于7074237752028440 / 2 ** 51double。由于分子可以被八整除,因此为884279719003555 / 2 ** 48。十进制数的展开以3.14159265358979311599796346854418516开始。而Math.PI.ToString("G17",CultureInfo.InvariantCulture)则给出了"3.1415926535897931" - Jeppe Stig Nielsen
哦,Thomas,微软刚刚把π取了很多位小数,并将其放入源代码中,这是没问题的。他们可以确保获得最好的“double”,所以这是他们能做到的最好。然而,当你像这样写一个“long”double字面值时,并不是所有的数字都会被实际使用。 - Jeppe Stig Nielsen
显示剩余6条评论
2个回答

4

正如Him所提到的,您可以使用const关键字来存储常量值。您还可以查看这篇文章

// Physical Constants in cgs Units

// Boltzman Constant. Units erg/deg(K) 
public const double BOLTZMAN = 1.3807e-16;

// Elementary Charge. Units statcoulomb 
public const double ECHARGE = 4.8032e-10;

// Electron Mass. Units g 
public const double EMASS = 9.1095e-28;

// Proton Mass. Units g 
public const double PMASS = 1.6726e-24;

// Gravitational Constant. Units dyne-cm^2/g^2
public const double GRAV = 6.6720e-08;

// Planck constant. Units erg-sec 
public const double PLANCK = 6.6262e-27;

// Speed of Light in a Vacuum. Units cm/sec 
public const double LIGHTSPEED = 2.9979e10;

// Stefan-Boltzman Constant. Units erg/cm^2-sec-deg^4 
public const double STEFANBOLTZ = 5.6703e-5;

// Avogadro Number. Units  1/mol 
public const double AVOGADRO = 6.0220e23;

// Gas Constant. Units erg/deg-mol 
public const double GASCONSTANT = 8.3144e07;

// Gravitational Acceleration at the Earths surface. Units cm/sec^2 
public const double GRAVACC = 980.67;

// Solar Mass. Units g 
public const double SOLARMASS = 1.99e33;

// Solar Radius. Units cm
public const double SOLARRADIUS = 6.96e10;

// Solar Luminosity. Units erg/sec
public const double SOLARLUM = 3.90e33;

// Solar Flux. Units erg/cm^2-sec
public const double SOLARFLUX = 6.41e10;

// Astronomical Unit (radius of the Earth's orbit). Units cm
public const double AU = 1.50e13;

如果存在一个包、库或本地类,那将是非常好的。

因此,目前没有可用的库或本地类。最好的方法是将上述常量包含在一个单独的类中,然后使用它。


2
更精确的值,以及用国际单位制(如有需要)表示的值,可以在http://physics.nist.gov/cuu/Constants/上找到。例如,玻尔兹曼常数(上面拼写错误了)是1.38064852e-23焦耳/开尔文。该页面提供了不确定性值。 - Jeppe Stig Nielsen
1
这是一个很好的答案,感谢您发布它。但如果有一个包或库的话就更好了,我仍然希望能够得到它。如果明天没有的话,我会将其标记为答案。 - lambdaDev

1
您可以使用const关键字来实现此功能:
class MyClass {
    public const double KELVIN = -273.15;
}

现在可以使用MyClass.KELVIN进行访问。
但是,根据您需要的计算精度,您可能需要不同的数据类型,例如decimalfloatdouble
不存在一个库来存储这些常量,因为这些常量具有非常不同的方面,迄今为止没有人考虑将它们包含在一个库中。但是,您可以通过将它们添加到一个类并在GitHub上发布来实现它们。

为什么以四为结尾。与摄氏度相比的偏移量为273.15。相对于水的三重温度的定义是273.16(因此三重点正好为+0.01摄氏度)。 - Jeppe Stig Nielsen
@JeppeStigNielsen 的确,我也以为是-273.14。 - MakePeaceGreatAgain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接