为什么我不能传递一个大的值作为Int32
本文关键字:一个 Int32 不能 为什么 | 更新日期: 2023-09-27 18:08:09
我有一个数字:94,800,620,800
Float是4字节的数据类型。Int32也是4字节数据类型。
float f = 94800620800; // ok
Int32 t = 94800620800; // error
请解释这个问题。为什么我得到一个错误时使用Int32。为什么我可以将这个数字用于浮点数据类型,因为它们都是4字节数据类型。谢谢。
因为您尝试分配的数字大于Int32
类型的数字的最大可能值,该值恰好是2,147,483,647。需要注意的是,Single
的最大值为3.402823 × 1038。
Int32的最大值是2,147,483,647,小于94,800,620,800。
float的取值范围为:±1.5 × 10 - 45 ~±3.4 × 1038
还有,看看这个SO问题——在java中,当大小相同时,float和integer数据类型有什么区别?这是一个Java问题,但概念是相同的,并且有详细的差异解释,即使它们大小相同。
因为这个数字对于一个4字节的int来说太大了。像Int32
这样的标量值有最小和最大限制(在这种情况下分别是-231和231 - 1),并且您根本不能存储超出此范围的值。
浮点数的存储方式是完全不同的,所以你不会因为巨大的值而遇到编译错误,只有在运行时可能出现的精度问题。
由于这些类型的内部表示。
float
使用i,d ^ n之类的东西,其中i是整数部分,d是小数部分,n是指数(当然,以2为基数)。
通过这种方式,您可以在float
中存储更大的数字,但在存储整型数字时,它不会像Int32
那样精确。如果您尝试转换
float f = 94800620800;
转换为一个大到足以存储其值的整型,它可能与初始值94800620800不同。
整数类型是精确表示,而浮点数是有效数字和指数的组合。
浮点数wiki页面解释了这是如何工作的
也许你应该阅读错误信息?;)
Error Integral constant is too large
32位整型的最大值为2,147,483,647
而浮点数则有效,因为它存储尾数和指数,而不仅仅是单个数字,因此它可以处理更大的范围,但代价是可能失去精度
尝试打印出你的浮点数,你会得到94800620000
而不是94800620800
,因为较低的位丢失了
Int32的最大值为2,147,483,647。你的价值要高得多。
看一下system.int32.maxvalue
常量表达式提供的值不在int数据类型范围内
Int32的取值范围是−2,147,483,648到2,147,483,647。