C#“积分常数太大”-Int32类型的整数变量太大

美丽

我正在构建一个ASP.NET Core API,该API返回周期表和太阳系中的行星。主要用于API调用以及.NET中的数据类型。在Visual Studio 2017中构建它。

我在用公斤表示行星的质量属性时遇到问题。显然是一个大整数,因此我尝试将其声明为long,Ulong,Int64甚至UInt64。但是,当我尝试输入新的行星模型并放入质量块时,出现以下错误:

struct System.Int32
Represents a 32 bit signed integer.
Integral constant is too large.

这是我在其中描述属性的PlanetModel.cs:

...
public UInt64 Volume { get; set; } //In Kilometers
public Int64 Mass { get; set; } //In Kilograms
public float Gravity { get; set; } //In m/s^2
...

但是,当我移到PlanetDataStore.cs时,这里就是我试图用数据构建对象的地方。

new PlanetModel()
                {
                    Position = 1,
                    Name = "Mercury",
                    Distance = 57909050, //In Kilometers
                    Orbit = 0.240846F, //In years
                    SolarDay = 0.5F, //In Days
                    Radius = 2439, //In Kilometers
                    Volume = 60830000000, // In Kilometers
                    Mass = 330110000000000000000000, //In Kilograms
                    Gravity = 3.7F, //In m/s^2
                },

我在Mass中的第一个'3'上弯曲着一个红色错误,上面的错误。但是,当我将鼠标悬停在Mass上时,它会显示:“ long PlanetMode.Mass {get; set;}”当我将鼠标悬停在等号上时,它会显示:“ struct System.Int64”

沟通不畅在哪里?为什么将我的属性声明为64位整数,但该值卡在32位中?

埃里克·利珀特

显然是一个大整数

这绝不是显而易见的。地球的质量不是整数的千克。您不应为此应用程序使用任何整数类型。将整数用于真正的整数,例如序列中的元素数。

使用double该被精确到十ISH小数的物理量。质量,体积,长度,力等应始终加倍。

这也将使您摆脱那些难以理解的数字。双打使您可以使用科学计数法,因为双打是用于科学的

Mass = 3.3011E23,

另外,当我们在寻找您的解决方案时,我注意到对于球形行星,可以从半径计算体积。您可能不希望同时存储两者。相反,只需存储一个并在需要时计算另一个即可。

我还注意到,您只有一个“距离”,在水星的情况下,这似乎是半长轴。为什么只存储半长轴,为什么不存储它呢?

我还注意到,您在各地混合了单位-米和公里,天和年等等。为什么不将所有内容都保留在标准单位中?长度以米为单位,时间以秒为单位,质量以千克为单位。当您始终使用标准单位时,您会发现犯下的愚蠢的数学错误更少。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章