#postgresql #sequelize.js
Вопрос:
Я использую sequelize для своих моделей и создаю модель, подобную этой
@Table({tableName: 'UserData'})
export default class UserDataModel extends Model<UserDataInterface> {
@Default(0)
@Column(DataType.DECIMAL(30, 4))
balance: number;
@Default(0)
@Column(DataType.DECIMAL(30, 4))
record: number;
Добавьте числа, подобные этому
UserDataModel.update({
balance: Sequelize.literal('balance click'),
record: Sequelize.literal('record click')
}, {
individualHooks: true,
where: {
userId: user.id
}
});
Тип щелчка-это
@Default(0)
@Column(DataType.DOUBLE)
click: number;
Нажмите в моем случае = 0,0001, и если я попробую суммировать 90 000 000 000.0000 0.0001 это работа, но если число больше 100 миллиардов, как 100 000 000 000 0.0001 это не работа, почему это происходит и что я должен делать?
пакет.json
"sequelize": "^5.22.4",
"sequelize-auto-migrations": "^1.0.3",
"sequelize-typescript": "^1.1.0",
Комментарии:
1. Указанная ДЕСЯТИЧНАЯ дробь будет работать только тогда, когда данные находятся в базе данных; другие части системы могут использовать поплавки IEEE, которые подчиняются (другим) правилам округления. Вам нужно будет тщательно следить за тем, чтобы никогда не использовать поплавки IEEE для обработки десятичных(30, 4) чисел, чтобы избежать этого округления.
2. Я действительно не понимаю, что ты имеешь в виду
3.Я имею в виду, что, хотя база данных будет работать с 30 значащими десятичными знаками с фиксированной запятой, как вы указали, для столбцов, в которых вы ее указали, остальная часть системы будет по-прежнему по умолчанию использовать обычный двойной формат с плавающей запятой с 15-17 значащими цифрами. Теперь, когда я прочитал более внимательно, это включает в
click
себя столбец, который вы указали какDOUBLE
. Вам нужно убедиться, что это преобразовано вDECIMAL(30, 4)
перед добавлением.4. О, спасибо, ты был прав, я сменил клик на
DECIMAL(30, 4)
, и это сработало
Ответ №1:
Нужно изменить тип столбца на тот же, если вы не будете суммировать большие десятичные дроби, все столбцы, которые вы суммируете