почему значения float получаются по-разному в mysql 5.1 и mysql 5.7 [duplicate]

Я написал этот маленький скрипт, который использует пакетные записи (макс. 500) и записывает только одну партию за другой.

использовать его, сначала создавая batchWorker let batch: any = new FbBatchWorker(db); Затем добавьте что-нибудь к рабочему batch.set(ref.doc(docId), MyObject);. И закончите его через batch.commit(). Api такой же, как для обычной Firestore Batch ( https://firebase.google.com/docs/firestore/manage-data/transactions#batched-writes ) Однако в настоящее время он поддерживает только set.

import {firestore} from "firebase-admin";


export default class FbBatchWorker {

    db: firestore.Firestore;
    batchList: FirebaseFirestore.WriteBatch[] = [];
    elemCount: number = 0;

    constructor(db: firestore.Firestore) {
        this.db = db;
        this.batchList.push(this.db.batch());
    }

    async commit(): Promise {
        let batchProms: Promise[] = [];

        for (let _batch of this.batchList) {
            (await _batch.commit());
            console.log("finished writing batch");
            // batchProms.push(_batch.commit());
        }

        // return Promise.all(batchProms);
        return Promise.resolve("yeah");
    }

    set(dbref: FirebaseFirestore.DocumentReference, data: any): void {
        this.elemCount = this.elemCount + 1;
        if (this.elemCount % 490 === 0) {
            this.batchList.push(this.db.batch());
        }
        this.batchList[this.batchList.length - 1].set(dbref, data);
    }

}

3
задан mskfisher 5 June 2012 в 18:03
поделиться

5 ответов

Поплавки имеют только определенный уровень точности, вы можете выйти за пределы того, насколько точным может быть тип данных с плавающей точкой. Вместо этого попробуйте использовать DOUBLE.

8
ответ дан tloach 28 August 2018 в 10:21
поделиться

Вы преодолеваете уровень точности. Вам нужно определить float с большей точностью, т. Е. «FLOAT (10,5)» будет означать float, который может иметь 10 цифр, всего с точностью до пяти после десятичной точки.

0
ответ дан Brian Schroth 28 August 2018 в 10:21
поделиться

Поплавок имеет 6 цифр точности. Используйте double, чтобы получить 15 или переключитесь на числовое (x, y). Если вам интересно, ознакомьтесь с требованиями к хранению для MySQL для разных типов данных.

4
ответ дан Gonzalo 28 August 2018 в 10:21
поделиться

В руководстве MySQL указано, что поля FLOAT, REAL, and DOUBLE PRECISION сохраняют значения как приблизительные, а поля INTEGER, SMALLINT, DECIMAL, and NUMERIC сохраняют значения как точные.

Я думаю, что лучше всего решить эту проблему с точностью до десятичной.

Ссылка: http://dev.mysql.com/doc/refman/5.1/en /numeric-types.html

3
ответ дан Lashae 28 August 2018 в 10:21
поделиться

Более высокая точность альтернативы float - DOUBLE. Но, глядя на пример, я думаю, что тип данных DECIMAL может пригодиться, если количество цифр, необходимых после нуля, невелико (около 2-4), а число цифр до десятичного числа также невелико (около 10-12).

2
ответ дан Salman A 28 August 2018 в 10:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: