Sequelize ORM无法正确读取数值9xxxxxxx9.0000000000

时间:2019-07-01 12:52:26

标签: node.js sequelize.js

我在NodeJ中使用Sequelize ORM连接到MSSQL服务器。 最近,我遇到了一个问题,即通过序列化读取时,一个特定值的表示方式有所不同。该值为9xxxxxxx9.0000000000

Ex:假设值为999999999.0000000000 通过序列读取时,得出的值为999999999.0000001 在Sequelize中,模型的类型为DataTypes.INTEGERallowNull为真

我也创建了Sequelize的错误,但是如果有人也可以在这里帮助我,那将是很棒的。 FIDDLE

我尝试了许多版本的Sequelize,包括最新版本,但问题仍然存在。我尝试使用一组不同的值,例如8乘9,它会正确返回该值。仅当数字位数为9并且数字以数字9开头和结尾时,问题才出现。

NodeJS中的同步模型

function getModel(dBSequelize, DataTypes) {
    const model = dBSequelize.define(
        'testtable',
        // attributes
        {
            Id: {
                type: DataTypes.INTEGER,
                allowNull: false,
                primaryKey: true,
                autoIncrement: true
            },
            Quantity: {
                type: DataTypes.INTEGER,
                allowNull: true
            }
        },
        // options
        {
            schema: 'dbo',
            freezeTableName: true,
            tableName: 'TestTable',
            timestamps: false
        });

    return model;
}

module.exports = getModel;

使用续集读取值

    async getData(context) {
        try {
            const connection = await dbFactory.getTediousConnection();
            var query = "select Quantity from dbo.[TestTable]"

            const response = await connection.execSql(query);
            connection.close();

            return response;
        }
        catch (error) {
        }
    }

您期望发生什么? 999999999

实际上发生了什么? 999999999.0000001

1 个答案:

答案 0 :(得分:0)

谢谢@Jeroen。从db取值时,我们将值转换为字符串,然后解析为float。它对我们有用,因为十进制后的四个值对我们就足够了。

选择convert(varchar,Quantity)作为“数量”...。

Quantity = parseFloat(Quantity)