当int变量大于10位时,会发生错误,该数字变为负数。
为什么会发生这种情况,我如何解决这个问题?
这是我的密码:
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发布于 2022-02-17 11:56:23
tl;dr
只需使用ulong而不是int来表示unixtimeOnline
ulong unixtimeOnline = itemsData2["lastUpdated"];发生了什么?
如前所述,int (或System.Int32)具有32位。
2147483647没有比这更高的int了。你得到的基本上是一个byte overflow。
从JSON.Parse中我怀疑你在使用SimpleJson
如果你有
int unixtimeOnline = itemsData2["lastUpdated"];它将隐式地使用
公共静态隐式运算符int(JSONNode d) {返回(d == null)?0: d.AsInt;}
它使用AsInt
公共虚拟int AsInt { get {value (int) AsDouble;} set {AsDouble= value;}
这是一个问题,因为double可以支持
所以当你简单的做
double d = 2147483648.0;
int example = (int)d;你会再次得到
-2147483648你想要的
您希望使用支持较大数字的类型。就像。
long:上升到9,223,372,036,854,775,807
实际上,系统时间滴答通常被存储为(参见DateTime.Ticks )。
或者实际上,因为您的时间可能永远不会是否定的,无论如何,直接使用未签名的
ulong:上升到18,446,744,073,709,551,615
解决方案
Long store short:其他数字值有隐式转换,所以只需使用
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();}
发布于 2022-02-17 10:53:53
如注释所述,您将需要使用long变量类型
https://stackoverflow.com/questions/71156664
复制相似问题