我在NodeJ中使用Sequelize ORM连接到MSSQL服务器。
最近,我遇到了一个问题,即通过序列化读取时,一个特定值的表示方式有所不同。该值为9xxxxxxx9.0000000000
Ex:假设值为999999999.0000000000
通过序列读取时,得出的值为999999999.0000001
在Sequelize中,模型的类型为DataTypes.INTEGER
,allowNull
为真
我也创建了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
答案 0 :(得分:0)
谢谢@Jeroen。从db取值时,我们将值转换为字符串,然后解析为float。它对我们有用,因为十进制后的四个值对我们就足够了。
选择convert(varchar,Quantity)作为“数量”...。
Quantity = parseFloat(Quantity)