我目前正在使用discord.js开发Discord机器人。我最近几天前开始自学SQLite(所以我可能只是个白痴……可能)。无论如何,在下面的代码中,我试图从SQlite DB中选择值并将其推入数组以作为消息发送。问题是,这些ID似乎在四舍五入,我试图将其转换为字符串(这是在它们已经是整数值之后,我试图重新输入这些值,但是那没有用),但是,它没有救命。在数据库中,这些值是正确的,但是在返回值(以不和谐消息的形式)时,这些值是错误的。问题似乎仅存在于SQLite查询中,因为返回的值没有通过记录行的脚本和控制台修改,返回的值已经取整。另外:准则非常混乱,请告诉我我哪里出了问题。 这些值四舍五入为: 从->到
我的测试值(158100000000000123)显示必须存在舍入错误,因为该值是正确的,直到与其他值相同的长度为止。 我也尝试创建另一列,它是一个字符串,但是当值的长度相同时,仍会进行舍入。任何帮助将不胜感激!
var partners = [];
var price = [];
var partnerembed;
var i;
function getPartners(id){
var query = "SELECT * FROM partners WHERE userid = " + id;
db.all(query, function (err, rows) {
if(err){
console.log(err);
}
else
{
console.log(rows[0].partner)
for (i = 0; i <= rows.length-1; i++)
{
partners.push(rows[i].partner)
price.push(rows[i].price)
}
}
});
}
getPartners(message.author.id);
function partnerMessage()
{
var partnerembed = new RichEmbed()
.setTitle('You are married to:')
.setAuthor(message.author.username, id.displayAvatarURL)
.setColor(0x8AC784);
for (i=0; i<= partners.length-1; i++)
{
partnerembed.addField(partners[i], price[i])
}
message.channel.send(partnerembed)
}
setTimeout(partnerMessage, 1000)
数据库值:
userid partnerid price
另外,不要质疑为什么我的机器人认为婚姻本质上只是奴隶制-婚姻速度有点慢...
答案 0 :(得分:0)
sqlite返回正确的值,不幸的是它比js可以处理的整数更多。
js支持53 bit integers。控制台中的简单js
p = 158100000000000123;
console.log(p);
产生相同的结果。
尝试使用CAST(在this page上找到文档)从数据库中选择列作为字符串,然后在js中将其全部视为字符串。