C# "Integral constant is too large"- Int32 类型的整数变量太大

标签 c# asp.net integer integer-overflow

我正在构建一个 ASP.NET Core 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 位?

最佳答案

Obviously a large integer

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

对于精确测量到小数点后十位的物理量,使用double。质量、体积、长度、力等应始终为双数。

这也会让您摆脱那些难以阅读的数字。 double 允许您使用科学记数法,因为 double 是为了科学:

Mass = 3.3011E23,

此外,在我们研究您的解决方案时,我注意到对于球形行星,可以根据半径计算体积。您可能不想同时存储两者;相反,只需存储一个并在需要时计算另一个。

我还注意到你有一个单一的“距离”,它似乎是水星的半长轴。为什么只存储半长轴,为什么不按原样命名?

我还注意到,您到处都混淆了单位——米和公里、天和年等等。为什么不将所有内容都保留在标准单位中?长度为米,时间为秒,质量为千克。如果您始终如一地使用标准单位,您会发现愚蠢的算术错误会减少。

关于C# "Integral constant is too large"- Int32 类型的整数变量太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46370302/

相关文章:

c# - 如何在单元测试中比较列表

c# - 是否有其他方法可以更灵活地编写此代码

c# - .NET 4.0 和可怕的 OnUserPreferenceChanged 挂起

c# - 如何为所有其他运行时错误添加通用错误页面?

c# - System.ArgumentException 值不在预期范围内,SQL 问题

c# - 如何从“包含”中选择最后一行

asp.net - App_Licenses.dll 和 licx 之间有什么关系?

c++ - 为无符号整数赋值时出现运行时错误

c++ - 比较整数和范围

python - Numpy 中的 DataType 可以有多小?