Sqlite возвращает значение, отличное от базы данных - PullRequest
0 голосов
/ 06 января 2020

В настоящее время я работаю над диссон-ботом, использующим дискорд. js. Я недавно начал учить себя SQLite пару дней go (так что, возможно, я просто идиот ... наверное). В любом случае, в приведенном ниже коде я пытаюсь выбрать значения из базы данных SQlite и поместить их в массив sh для отправки в виде сообщения. Проблема в том, что идентификаторы, кажется, округляются, я пытался преобразовать в строки (это было после того, как они уже были целочисленными значениями, я попытался повторно ввести значения, но это не сработало), однако это не помогло Помогите. В базе данных значения верны, но при возврате значений (в форме сообщения разногласия) значения неверны. Эта проблема, по-видимому, связана исключительно с запросом SQLite, поскольку возвращаемое значение не изменяется с помощью сценария и консоли, регистрирующих строки, возвращая значения, которые уже округлены. Также: Кодекс очень грязный, пожалуйста, покажи мне, где я ошибся. Значения округлены до: От -> до

  • 231324359870906368 -> 231324359870906370
  • 342592681790144513 -> 342592681790144500
  • 3106829893801029001011010291011010291-1000000000000000000000000000000000000000000001902702700000002 -> 345801479329677300
  • 549366490919469096 -> 549366490919469100
  • 199416992615235600 -> 199416992615235586
  • 158100000000000123 -> 1581000000 * 100 * 100 * 100 * 100 * 100 * 100000000000000 ) показал, что должна быть ошибка округления, так как значение было правильным до тех пор, пока оно не стало той же длины, что и другие значения. Я также попытался создать еще один столбец, который представлял собой строку, но округление все еще происходило, когда значение было той же длины. Любая помощь очень ценится!
          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
    • 332734758515769354 231324359870906368 420000
    • 332734758515769354 3425926817 10324545 *
    • 332734758515769354 310682989380108290 4

Кроме того, не спрашивайте, почему мой бот считает брак по сути лишь рабством - он немного медленный ...

1 Ответ

0 голосов
/ 06 января 2020

sqlite возвращает правильное значение, к сожалению, оно более целое, чем может обработать js.

js поддерживает 53-битные целые числа . Простой js в консоли

p = 158100000000000123; 
console.log(p);   

дает тот же результат.

Попробуйте выбрать столбец (столбцы) из базы данных в виде строки, используя CAST (do c, найденный в эта страница ), а затем обрабатывать все как строки в js.

...