首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当int变量大于10位时

当int变量大于10位时
EN

Stack Overflow用户
提问于 2022-02-17 10:47:21
回答 2查看 240关注 0票数 -1

当int变量大于10位时,会发生错误,该数字变为负数。

为什么会发生这种情况,我如何解决这个问题?

这是我的密码:

代码语言:javascript
复制
UnityWebRequest www = new UnityWebRequest("https://api.hypixel.net/skyblock/bazaar");
www.downloadHandler = new DownloadHandlerBuffer();
yield return www.SendWebRequest();
JSONNode itemsData = JSON.Parse(www.downloadHandler.text);
unixtimeOnline = itemsData2["lastUpdated"];
Debug.Log(unixtimeOnline);
    // output -2147483648
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-17 11:56:23

tl;dr

只需使用ulong而不是int来表示unixtimeOnline

代码语言:javascript
复制
ulong unixtimeOnline = itemsData2["lastUpdated"];

发生了什么?

如前所述,int (或System.Int32)具有32位。

int.MaxValue

代码语言:javascript
复制
2147483647

没有比这更高的int了。你得到的基本上是一个byte overflow

JSON.Parse中我怀疑你在使用SimpleJson

如果你有

代码语言:javascript
复制
int unixtimeOnline = itemsData2["lastUpdated"];

它将隐式地使用

公共静态隐式运算符int(JSONNode d) {返回(d == null)?0: d.AsInt;}

它使用AsInt

公共虚拟int AsInt { get {value (int) AsDouble;} set {AsDouble= value;}

这是一个问题,因为double可以支持

所以当你简单的做

代码语言:javascript
复制
double d = 2147483648.0;
int example = (int)d;

你会再次得到

代码语言:javascript
复制
-2147483648

你想要的

您希望使用支持较大数字的类型。就像。

  • long:上升到

9,223,372,036,854,775,807

实际上,系统时间滴答通常被存储为(参见DateTime.Ticks )。

或者实际上,因为您的时间可能永远不会是否定的,无论如何,直接使用未签名的

  • ulong:上升到

18,446,744,073,709,551,615

解决方案

Long store short:其他数字值有隐式转换,所以只需使用

代码语言:javascript
复制
ulong unixtimeOnline = itemsData2["lastUpdated"];

它将使用AsUlong代替

公共静态隐式运算符ulong(JSONNode d) {返回(d == null)?0: d.AsULong;}

它现在正确地使用

公共虚拟ulong AsULong { get { ulong val = 0;if (ulong.TryParse(值,out ))返回val;返回0;} set { Value = value.ToString();}

票数 1
EN

Stack Overflow用户

发布于 2022-02-17 10:53:53

如注释所述,您将需要使用long变量类型

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71156664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档