Проблема с плавающей запятой WebSQL

#javascript #cordova

#javascript #кордова

Вопрос:

Я работаю с PhoneGap API на Android. API эмулирует WebSQL для хранения. Я столкнулся с проблемой, и я не уверен, приписывать ли это моим ограниченным знаниям JavaScript или чему-то, чего мне не хватает в PhoneGap / WebSQL.

Короче говоря, я сохраняю временные метки эпохи UNIX в виде числа с плавающей запятой через WebSQL.

         tx.executeSql("INSERT INTO timeline VALUES(0, 10, 100, 1297618964.65, '2011-02-13')");
        tx.executeSql("INSERT INTO timeline VALUES(0, 8, 120, 1297618985.65, '2011-02-13')");
  

Затем эти значения запрашиваются с помощью простого оператора select и считываются с помощью следующего кода:

         for (i = 0; i < results.rows.length; i  ){
            console.log(results.rows.item(i).timestamp);
            timestamps.push(results.rows.item(i).timestamp);
            weights.push(results.rows.item(i).intensity);    
        }
  

Проблема в том, что значение «timestamp», похоже, усечено. Журнал показывает 1.29762e 09, и результирующие графики, которые я строю, отражают эту потерю точности.

Использование parseFloat или toFixed здесь приводит к той же потере точности, просто в другом формате для печати. Определение таблицы использует FLOAT для метки времени, поэтому я немного не понимаю, почему мои значения преобразуются таким образом, прежде чем я что-либо с ними сделаю.

Ответ №1:

можете ли вы использовать DOUBLE для поля в определении таблицы?

и почему ваша временная метка имеет значение float? они вам нужны такими? в javascript временные метки — это миллисекунды, прошедшие с эпохи, как целое число. у меня нет проблем с сохранением таких временных меток в WebSQL в приложении, которое я пишу. у вас есть миллисекунды после десятичной точки? тогда, возможно, вы можете умножить на 1000 и сохранить как long int и снова разделить 1000 после загрузки его из базы данных.