我使用Discord.js用户对象和Mongoose Schema。但问题似乎不是那些问题的一部分。
var Message = require('../app/models/message'); //Mongoose Schema
...
var newMessage = new Message();
...
//taggedUser is an object containing all the info about user. id property contains user id which is number.
const taggedUser = message.mentions.users.first();
newMessage.message.to = taggedUser.id;
console.log(taggedUser.id);
console.log(newMessage.message.to);
上面的代码应该将用户ID分配给Schema。一切正常,但......
442090269928849410
442090269928849400
现在这些变量中最后2个字符不相同。这怎么可能呢? =
改变了变量中的实际数据?
如果是Mongoose,这就是Schema的样子:
var msgSchema = mongoose.Schema({
message : {
from : Number,
to : Number,
content : String,
time : Date
}
});
修改:
如果我改变
to : Number,
到字符串:
to : String,
它运作正常。我仍然需要答案,为什么这与数字不正确。在有问题的线上方,我有另一个完全正常的id:
newMessage.message.from = msg.author.id;
我已经尝试将taggedUser.id解析为整数或创建Number()对象,但这没有帮助。因此,每次将taggedUser.id
转换为数字或将其解析为int时,它都会更改为略有不同的数字。
我不知道该怎么想。如何在分配期间更改数据?
如果问题中没有提供足够的数据,请问我,我会添加所需的一切。我无法想象可能导致这个错误的原因。
答案 0 :(得分:2)
9007199254740992 - JS中最高的安全号码
442090269928849410 - 您的整数(id)
这种小变化的原因是JavaScript可以使用的“最高精度”。
当您尝试将id用作数字时,它受此影响而且已更改,因为JavaScript不能那么精确。
如果您在此答案的开头看到这两个数字,则可以看到它们被2个字符分开,这就是为什么只有最后一个字符发生了变化。
基本上你的整数受到JS数字可以有的最大精度的影响。
答案 1 :(得分:0)
您可能只是看到doReturn(1).when(securityService).getUserIdByPrincipal(any(Principal.class));
异步运行的工件。试试这个:
console.log
......看看这是否有所不同。